From 1f126237a0cd7540ab2b2a59c96904c509268a17 Mon Sep 17 00:00:00 2001 From: Nadeshiko Manju Date: Wed, 1 Oct 2025 19:34:47 +0800 Subject: [PATCH] gh-123828: Fix data race in `_interpchannels._waiting_release` (GH-124107) (cherry picked from commit f39dea3baeb9f9b7a0199d06508d722494db0145) Co-authored-by: Nadeshiko Manju --- Lib/test/test__interpchannels.py | 3 +-- Modules/_interpchannelsmodule.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Lib/test/test__interpchannels.py b/Lib/test/test__interpchannels.py index 858d31a73cf4f4..d7cf77368ef9f2 100644 --- a/Lib/test/test__interpchannels.py +++ b/Lib/test/test__interpchannels.py @@ -6,7 +6,7 @@ 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 @@ def test_shareable(self): #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 9c1f8615161275..274bfacfed874b 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