[fpc-devel] TAVLTree(avl_tree.pp) thread safety, fcl-xml(DOM) is also concerned.

Inoussa OUEDRAOGO inoussa12 at gmail.com
Wed Aug 6 20:41:27 CEST 2008


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

Attached is a patch that demonstrate the above proposition.

Best regards.

Inoussa O.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: avl_tree.dif
Type: application/octet-stream
Size: 2824 bytes
Desc: not available
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20080806/9564767b/attachment.obj>

More information about the fpc-devel mailing list