Skip to content

Commit 68528e6

Browse files
committed
stress module weakref test with multiple threads
1 parent 0dbbc4c commit 68528e6

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

Lib/test/test_weakref.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,11 +2253,31 @@ def test_names(self):
22532253
self.assertEqual(obj.__name__, name)
22542254
self.assertEqual(obj.__qualname__, name)
22552255

2256-
def test_module_dealloc(self):
2256+
def test_module_weakref(self):
22572257
mod = types.ModuleType("temp_mod")
2258+
common_ref = weakref.ref(mod)
2259+
threads = []
2260+
n_threads = 5
2261+
b = threading.Barrier(n_threads)
2262+
2263+
def weakref_mod_worker():
2264+
b.wait()
2265+
r = weakref.ref(mod)
2266+
rr = r()
2267+
self.assertIs(rr, mod)
2268+
self.assertIs(rr, common_ref())
2269+
2270+
for i in range(n_threads):
2271+
t = threading.Thread(target=weakref_mod_worker)
2272+
threads.append(t)
2273+
t.start()
2274+
2275+
for t in threads:
2276+
t.join()
2277+
22582278
r = weakref.ref(mod)
22592279
self.assertIsNotNone(r, "weak ref to a module should not be None")
2260-
2280+
self.assertIs(r(), common_ref())
22612281
del mod
22622282

22632283

0 commit comments

Comments
 (0)