From: Tim Peters Date: Sat, 30 Mar 2002 06:20:23 +0000 (+0000) Subject: Retract the claim that this is always safe if PyMem_{Del, DEL, Free, FREE} X-Git-Tag: v2.3c1~6240 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=12300686ca805289a340b740856ad00139a9b3c8;p=python Retract the claim that this is always safe if PyMem_{Del, DEL, Free, FREE} are called without the GIL. It's incredibly unlikely to fail, but I can't make this bulletproof without either adding a lock for exclusion, or giving up on growing the arena base-address vector (it would be safe if this were a static array). --- diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c index 5ac5c35f63..500afba469 100644 --- a/Objects/obmalloc.c +++ b/Objects/obmalloc.c @@ -403,6 +403,10 @@ new_arena(void) * only make a supposed-to-succeed case fail by mistake). * Read the above 50 times before changing anything in this * block. + * XXX Fudge. This is still vulnerable: there's nothing + * XXX to stop the bad-guy thread from picking up the + * XXX current value of arenas, but not indexing off of it + * XXX until after the PyMem_FREE(oldarenas) below completes. */ uptr *oldarenas; int newmax = maxarenas + (maxarenas >> 1);