mirror of
https://github.com/python/cpython.git
synced 2026-01-27 05:05:50 +00:00
gh-144068: fix JIT tracer memory leak when daemon thread exits (GH-144077)
This commit is contained in:
parent
6f579147e3
commit
29840247ff
@ -3889,6 +3889,29 @@ class TestUopsOptimization(unittest.TestCase):
|
||||
"""), PYTHON_JIT="1", PYTHON_JIT_STRESS="1")
|
||||
self.assertEqual(result[0].rc, 0, result)
|
||||
|
||||
def test_144068_daemon_thread_jit_cleanup(self):
|
||||
result = script_helper.run_python_until_end('-c', textwrap.dedent("""
|
||||
import threading
|
||||
import time
|
||||
|
||||
def hot_loop():
|
||||
end = time.time() + 5.0
|
||||
while time.time() < end:
|
||||
pass
|
||||
|
||||
# Create a daemon thread that will be abandoned at shutdown
|
||||
t = threading.Thread(target=hot_loop, daemon=True)
|
||||
t.start()
|
||||
|
||||
time.sleep(0.1)
|
||||
"""), PYTHON_JIT="1", ASAN_OPTIONS="detect_leaks=1")
|
||||
self.assertEqual(result[0].rc, 0, result)
|
||||
stderr = result[0].err.decode('utf-8', errors='replace')
|
||||
self.assertNotIn('LeakSanitizer', stderr,
|
||||
f"Memory leak detected by ASan:\n{stderr}")
|
||||
self.assertNotIn('_PyJit_TryInitializeTracing', stderr,
|
||||
f"JIT tracer memory leak detected:\n{stderr}")
|
||||
|
||||
def global_identity(x):
|
||||
return x
|
||||
|
||||
|
||||
@ -0,0 +1 @@
|
||||
Fix JIT tracer memory leak, ensure the JIT tracer state is freed when daemon threads are cleaned up during interpreter shutdown.
|
||||
@ -1843,6 +1843,10 @@ PyThreadState_Clear(PyThreadState *tstate)
|
||||
|
||||
_PyThreadState_ClearMimallocHeaps(tstate);
|
||||
|
||||
#ifdef _Py_TIER2
|
||||
_PyJit_TracerFree((_PyThreadStateImpl *)tstate);
|
||||
#endif
|
||||
|
||||
tstate->_status.cleared = 1;
|
||||
|
||||
// XXX Call _PyThreadStateSwap(runtime, NULL) here if "current".
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user