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 - [email protected] http://lists.freepascal.org/mailman/listinfo/fpc-devel
