Hi, TAVLTree in avl_tree.pp is not thread safe due to the node allocation and de-allocation done through the global declared "NodeMemManager" variable. TAVLTreeNodeMemManager implementation is cleary not thread safe, which btw IMHO is a good thing ( for performance reason).
Proposition : (a) TAVLTree should allow, at construct time, to specify a Node memory manager which will be kept and used. If not specified the global one will be used. (b) "NodeMemManager" should be declared as "ThreadVar". This changes does not break the API while making the implementation thread safe. By the way note that the XML DOM's implementation ( TDOMNode_WithChildren ) uses TAVLTree, so every code that uses the fcl-xml package mainly the DOM unit, is not thread safe. If this proposition is accepted it will be nice to have it introduced in the soon to be release fpc 2.2.2, in the case that is still possible, mainly for server programming. Attached is a patch that demonstrate the above proposition. Best regards. -- Inoussa O.
avl_tree.dif
Description: Binary data
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel