GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing github.com — Free threading: Data race on `tool_id` in `sys.monitoring` · Issue #154348 · python/cpython Open Labels interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error DescriptionBug reportBug description:Thanks devdanzin for his fusil, this issue was reported by #153852 TSAN-0030. It;s a data race about how to reproducerun the following on a no-gil tsan build import sys, threading assert not sys._is_gil_enabled(), "run free-threaded: PYTHON_GIL=0" # sys.monitoring.use_tool_id(tool_id, name) does an unsynchronized check-then-act on the # interpreter-global registry interp->monitoring_tool_names[tool_id]: # if (interp->monitoring_tool_names[tool_id] != NULL) { raise; } # :2190 read # interp->monitoring_tool_names[tool_id] = Py_NewRef(name); # :2194 write # Many threads racing to claim the SAME free tool id read the slot while one writes it. mon = sys.monitoring TOOL_ID = 3 # any 0..5; not reserved NT = 8 ROUNDS = 6000 enter = threading.Barrier(NT + 1) leave = threading.Barrier(NT + 1) def worker(): for _ in range(ROUNDS): enter.wait() # all workers released together onto a freshly-freed slot try: mon.use_tool_id(TOOL_ID, "t") # read :2190 races the winner's write :2194 except ValueError: pass # "tool 3 is already in use" -> lost the race, expected leave.wait() ts = [threading.Thread(target=worker, name=f"w{i}") for i in range(NT)] for t in ts: t.start() for r in range(ROUNDS): mon.free_tool_id(TOOL_ID) # NULL the slot so the next round starts from a free id enter.wait() leave.wait() for t in ts: t.join() print("done, no crash") CPython versions tested on:CPython main branch Operating systems tested on:Linux Linked PRsActivity
MetadataMetadataAssigneesLabelsinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error ProjectsMilestoneRelationshipsDevelopmentIssue actions |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |