From 12300686ca805289a340b740856ad00139a9b3c8 Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Sat, 30 Mar 2002 06:20:23 +0000 Subject: [PATCH] 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). --- Objects/obmalloc.c | 4 ++++ 1 file changed, 4 insertions(+) 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); -- 2.40.0