After I finally understood what thread-safety guarantees the Python memory allocator needs to provide, I went and did some hard thinking about the code this afternoon. I believe that my modifications provide the same guarantees that the original version did. I do need to declare the arenas array to be volatile, and leak the array when resizing it. Please correct me if I am wrong, but the situation that needs to be supported is this:

While one thread holds the GIL, any other thread can call PyObject_Free with a pointer that was returned by the system malloc.


The following situation is *not* supported:

While one thread holds the GIL, another thread calls PyObject_Free with a pointer that was returned by PyObject_Malloc.


I'm hoping that I got things a little better this time around. I've submitted my updated patch to the patch tracker. For reference, I've included links to SourceForge and the previous thread.


Thank you,

Evan Jones



Previous thread:

http://mail.python.org/pipermail/python-dev/2005-January/051255.html

Patch location:

http://sourceforge.net/tracker/index.php? func=detail&aid=1123430&group_id=5470&atid=305470

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to