From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Tue, 7 Oct 2025 17:29:37 +0000 (+0200) Subject: [3.14] gh-123828: Fix data race in `_interpchannels._waiting_release` (GH-124107... X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a69bdab5410b27c9983adbdae69645897c2fa550;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-123828: Fix data race in `_interpchannels._waiting_release` (GH-124107) (GH-139517) gh-123828: Fix data race in `_interpchannels._waiting_release` (GH-124107) (cherry picked from commit f39dea3baeb9f9b7a0199d06508d722494db0145) Co-authored-by: Nadeshiko Manju --- diff --git a/Lib/test/test__interpchannels.py b/Lib/test/test__interpchannels.py index 858d31a73cf4..d7cf77368ef9 100644 --- a/Lib/test/test__interpchannels.py +++ b/Lib/test/test__interpchannels.py @@ -6,7 +6,7 @@ import threading import time import unittest -from test.support import import_helper, skip_if_sanitizer +from test.support import import_helper _channels = import_helper.import_module('_interpchannels') from concurrent.interpreters import _crossinterp @@ -365,7 +365,6 @@ class ChannelIDTests(TestBase): #self.assertIsNot(got, obj) -@skip_if_sanitizer('gh-129824: race on _waiting_release', thread=True) class ChannelTests(TestBase): def test_create_cid(self): diff --git a/Modules/_interpchannelsmodule.c b/Modules/_interpchannelsmodule.c index 9c1f86151612..274bfacfed87 100644 --- a/Modules/_interpchannelsmodule.c +++ b/Modules/_interpchannelsmodule.c @@ -511,12 +511,12 @@ _waiting_release(_waiting_t *waiting, int received) assert(!waiting->received); waiting->status = WAITING_RELEASING; - PyThread_release_lock(waiting->mutex); if (waiting->received != received) { assert(received == 1); waiting->received = received; } waiting->status = WAITING_RELEASED; + PyThread_release_lock(waiting->mutex); } static void