From: Sam Gross Date: Fri, 20 Oct 2023 16:51:34 +0000 (+0200) Subject: gh-111119: Fix flaky test test_lock_two_threads (gh-111124) X-Git-Tag: v3.13.0a2~387 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=264f4af506bf5b587105eab37fcfb7dfa62d6587;p=thirdparty%2FPython%2Fcpython.git gh-111119: Fix flaky test test_lock_two_threads (gh-111124) --- diff --git a/Modules/_testinternalcapi/test_lock.c b/Modules/_testinternalcapi/test_lock.c index 33b49dacaa94..82a0c827deed 100644 --- a/Modules/_testinternalcapi/test_lock.c +++ b/Modules/_testinternalcapi/test_lock.c @@ -75,10 +75,18 @@ test_lock_two_threads(PyObject *self, PyObject *obj) assert(test_data.m.v == 1); PyThread_start_new_thread(lock_thread, &test_data); - while (!_Py_atomic_load_int(&test_data.started)) { - pysleep(10); - } - pysleep(10); // allow some time for the other thread to try to lock + + // wait up to two seconds for the lock_thread to attempt to lock "m" + int iters = 0; + uint8_t v; + do { + pysleep(10); // allow some time for the other thread to try to lock + v = _Py_atomic_load_uint8_relaxed(&test_data.m.v); + assert(v == 1 || v == 3); + iters++; + } while (v != 3 && iters < 200); + + // both the "locked" and the "has parked" bits should be set assert(test_data.m.v == 3); PyMutex_Unlock(&test_data.m);