You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 13, 2025. It is now read-only.
Originally reported by: Anselm Kruis (Bitbucket: akruis, GitHub: akruis)
Problem
Since commit 2b9cd7d84dfd6e2 slp_kill_tasks_with_stacks pretends to send a kill message to tasklets on other threads. But the second loop is dead code, because it can't be reached.
Since commit 49d9f07ce726 slp_kill_tasks_with_stacks ignores its argument and operates on the current thread only.
During shutdown Py_Finalize() indirectly invokes slp_kill_tasks_with_stacks at least two times:
with a NULL argument via PyStackless_kill_tasks_with_stacks(1). At this time, the interpreter is still fully functional.
Once for each thread-state via PyInterpreterState_Clear(interp) and PyThreadState_Clear(). During these calls the import mechanism is no longer functional.
Because slp_kill_tasks_with_stacks ignores its argument, only the first call has any effect. Stackless dosn't kill any tasklets on other (daemon) threads.
Test Case
It's fairly hard to write a test case for problems, occurring late during interpreter shutdown. AFAIK the only option is to use a del-method of an object, that gets cleared sufficiently late. The codec search path, which is stored in the interpreter state, is such an object. PyInterpreterState_Clear clears it immediately after the threads.
My plan is to add a test-case, that ensures, that stackless kills all tasklets. Then I'll fix slp_kill_tasks_with_stacks.
Originally reported by: Anselm Kruis (Bitbucket: akruis, GitHub: akruis)
Problem
Since commit 2b9cd7d84dfd6e2 slp_kill_tasks_with_stacks pretends to send a kill message to tasklets on other threads. But the second loop is dead code, because it can't be reached.
Since commit 49d9f07ce726 slp_kill_tasks_with_stacks ignores its argument and operates on the current thread only.
During shutdown Py_Finalize() indirectly invokes slp_kill_tasks_with_stacks at least two times:
Because slp_kill_tasks_with_stacks ignores its argument, only the first call has any effect. Stackless dosn't kill any tasklets on other (daemon) threads.
Test Case
It's fairly hard to write a test case for problems, occurring late during interpreter shutdown. AFAIK the only option is to use a del-method of an object, that gets cleared sufficiently late. The codec search path, which is stored in the interpreter state, is such an object. PyInterpreterState_Clear clears it immediately after the threads.
My plan is to add a test-case, that ensures, that stackless kills all tasklets. Then I'll fix slp_kill_tasks_with_stacks.
The text was updated successfully, but these errors were encountered: