dealloc and finalize_modules by youknowone · Pull Request #6934 · RustPython/RustPython
Replace the absence of module finalization during interpreter shutdown with a 5-phase algorithm matching pylifecycle.c finalize_modules(): 1. Set special sys attributes to None, restore stdio 2. Set all sys.modules values to None, collect module dicts 3. Clear sys.modules dict 4. Clear module dicts in reverse import order (2-pass _PyModule_ClearDict) 5. Clear sys and builtins dicts last This ensures __del__ methods are called during shutdown and modules are cleaned up in reverse import order without hardcoded module names.
…sts as expected failure
Without GC, clearing all module dicts during finalization causes __del__
handlers to fail (globals are None). Restrict Phase 4 to only clear
__main__ dict — other modules' globals stay intact for their __del__
handlers.
Mark test_daemon_threads_shutdown_{stdout,stderr}_deadlock as expected
failures — without GC+GIL, finalize_modules clears __main__ globals
while daemon threads are still running.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
youknowone
changed the title
finalize_modules
dealloc and finalize_modules
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters