From: Brett Simmers Date: Wed, 20 Mar 2024 15:18:26 +0000 (-0700) Subject: gh-116908: Only write to `_pending_calls.calls_to_do` with atomic operations (#117044) X-Git-Tag: v3.13.0a6~215 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9221ef2d8cb7f4cf37592eb650d4c8f972033000;p=thirdparty%2FPython%2Fcpython.git gh-116908: Only write to `_pending_calls.calls_to_do` with atomic operations (#117044) These writes to `pending->calls_to_do` need to be atomic, because other threads can read (atomically) from `calls_to_do` without holding `pending->mutex`. --- diff --git a/Python/ceval_gil.c b/Python/ceval_gil.c index d2cd35dfa868..78c13d619e6e 100644 --- a/Python/ceval_gil.c +++ b/Python/ceval_gil.c @@ -671,7 +671,7 @@ _push_pending_call(struct _pending_calls *pending, pending->calls[i].flags = flags; pending->last = j; assert(pending->calls_to_do < NPENDINGCALLS); - pending->calls_to_do++; + _Py_atomic_add_int32(&pending->calls_to_do, 1); return 0; } @@ -701,7 +701,7 @@ _pop_pending_call(struct _pending_calls *pending, pending->calls[i] = (struct _pending_call){0}; pending->first = (i + 1) % NPENDINGCALLS; assert(pending->calls_to_do > 0); - pending->calls_to_do--; + _Py_atomic_add_int32(&pending->calls_to_do, -1); } }