summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_memoryview.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_memoryview.py')
-rw-r--r--Lib/test/test_memoryview.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/Lib/test/test_memoryview.py b/Lib/test/test_memoryview.py
index 96320eb..856e179 100644
--- a/Lib/test/test_memoryview.py
+++ b/Lib/test/test_memoryview.py
@@ -16,7 +16,8 @@ import pickle
import struct
from itertools import product
-from test.support import import_helper
+from test import support
+from test.support import import_helper, threading_helper
class MyObject:
@@ -733,5 +734,28 @@ class OtherTest(unittest.TestCase):
self.assertIsNone(wr())
+@threading_helper.requires_working_threading()
+@support.requires_resource("cpu")
+class RacingTest(unittest.TestCase):
+ def test_racing_getbuf_and_releasebuf(self):
+ """Repeatly access the memoryview for racing."""
+ from multiprocessing.managers import SharedMemoryManager
+ from threading import Thread
+
+ n = 100
+ with SharedMemoryManager() as smm:
+ obj = smm.ShareableList(range(100))
+ threads = []
+ for _ in range(n):
+ # Issue gh-127085, the `ShareableList.count` is just a convenient way to mess the `exports`
+ # counter of `memoryview`, this issue has no direct relation with `ShareableList`.
+ threads.append(Thread(target=obj.count, args=(1,)))
+
+ with threading_helper.start_threads(threads):
+ pass
+
+ del obj
+
+
if __name__ == "__main__":
unittest.main()