[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-19 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset a36adfa6bbf5e612a4d4639124502135690899b8 by Victor Stinner in 
branch 'master':
bpo-39877: 4th take_gil() fix for daemon threads (GH-19080)
https://github.com/python/cpython/commit/a36adfa6bbf5e612a4d4639124502135690899b8


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-19 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18437
pull_request: https://github.com/python/cpython/pull/19080

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-17 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 29356e03d4f8800b04f799efe7a10e3ce8b16f61 by Victor Stinner in 
branch 'master':
bpo-39877: Fix take_gil() for daemon threads (GH-19054)
https://github.com/python/cpython/commit/29356e03d4f8800b04f799efe7a10e3ce8b16f61


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-17 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18405
pull_request: https://github.com/python/cpython/pull/19054

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-11 Thread STINNER Victor


STINNER Victor  added the comment:

The initial issue is now fixed. I close the issue.

take_gil() only checks if the thread must exit once the GIL is acquired. Maybe 
it would be able to exit earlier, but I took the safe approach. If we must 
exit, drop the GIL and then exit. That's basically Python 3.8 behavior.

If someone wants to optimize/enhance take_gil() for daemon thread, I suggest to 
open a new issue.

Note: Supporting daemon threads require tricky code in take_gil(). I would 
prefer to deprecate daemon threads and prepare their removal.

--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-11 Thread STINNER Victor


STINNER Victor  added the comment:

I created bpo-39941 "multiprocessing: Process.join() should emit a warning if 
the process is killed by a signal" which may help to detect the issue earlier 
on any platform, not only on FreeBSD.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset b4698ecfdb526e0a9f5fa6ef0f8e1d8cca500203 by Victor Stinner in 
branch 'master':
bpo-39877: Deprecate PyEval_InitThreads() (GH-18892)
https://github.com/python/cpython/commit/b4698ecfdb526e0a9f5fa6ef0f8e1d8cca500203


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18249
pull_request: https://github.com/python/cpython/pull/18892

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 175a704abfcb3400aaeb66d4f098d92ca7e30892 by Victor Stinner in 
branch 'master':
bpo-39877: PyGILState_Ensure() don't call PyEval_InitThreads() (GH-18891)
https://github.com/python/cpython/commit/175a704abfcb3400aaeb66d4f098d92ca7e30892


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:

I tested (run multiple times) daemon_threads_exit.py with slow_exit.patch: no 
crash.

I also tested (run multiple times) stress.py + sleep_at_exit.patch of 
bpo-37135: no crash.

And I tested  asyncio_gc.py of bpo-19466: no crash neither.

Python finalization now looks reliable. I'm not sure if it's "more" reliable 
than previously, but at least, I cannot get a crash anymore, even after 
bpo-19466 has been fixed (clear Python thread states of daemon threads earlier).

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:

> The problem is that Python already freed the memory of all PyThreadState 
> structures, whereas PyEval_RestoreThread(tstate) dereferences tstate to get 
> the _PyRuntimeState structure:

Funny/not funny, bpo-36818 added a similar bug with commit 
396e0a8d9dc65453cb9d53500d0a620602656cfe in June 2019: bpo-37135. I reverted 
the change to fix the issue.

Hopefully, it should now be fixed and the rationale for accessing directly 
_PyRuntime should now be better documented.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18248
pull_request: https://github.com/python/cpython/pull/18891

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 9229105f19705f72e553cf066751ac47c7b7 by Victor Stinner in 
branch 'master':
bpo-39877: take_gil() checks tstate_must_exit() twice (GH-18890)
https://github.com/python/cpython/commit/9229105f19705f72e553cf066751ac47c7b7


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18247
pull_request: https://github.com/python/cpython/pull/18890

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18245
pull_request: https://github.com/python/cpython/pull/1

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 85f5a69ae1541271286bb0f0e0303aabf792dd5c by Victor Stinner in 
branch 'master':
bpo-39877: Refactor take_gil() function (GH-18885)
https://github.com/python/cpython/commit/85f5a69ae1541271286bb0f0e0303aabf792dd5c


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18242
pull_request: https://github.com/python/cpython/pull/18885

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 111e4ee52a1739e7c7221adde2fc364ef4954af2 by Victor Stinner in 
branch 'master':
bpo-39877: Py_Initialize() pass tstate to PyEval_InitThreads() (GH-18884)
https://github.com/python/cpython/commit/111e4ee52a1739e7c7221adde2fc364ef4954af2


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18241
pull_request: https://github.com/python/cpython/pull/18884

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 3225b9f9739cd4bcca372d0fa939cea1ae5c6402 by Victor Stinner in 
branch 'master':
bpo-39877: Remove useless PyEval_InitThreads() calls (GH-18883)
https://github.com/python/cpython/commit/3225b9f9739cd4bcca372d0fa939cea1ae5c6402


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-09 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18240
pull_request: https://github.com/python/cpython/pull/18883

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-08 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18211
stage: resolved -> patch review
pull_request: https://github.com/python/cpython/pull/18854

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-08 Thread STINNER Victor


STINNER Victor  added the comment:

I reopen the issue, my change introduced a *new* issue.

While trying to fix bpo-19466, work on PR 18848, I noticed that my commit 
eb4e2ae2b8486e8ee4249218b95d94a9f0cc513e introduced a race condition :-(

The problem is that while the main thread is executing Py_FinalizeEx(), daemon 
threads can be waiting in take_gil(). Py_FinalizeEx() calls 
_PyRuntimeState_SetFinalizing(runtime, tstate). Later, Py_FinalizeEx() executes 
arbitrary Python code in _PyImport_Cleanup(tstate) which releases the GIL to 
give a chance to other threads to execute:

if (_Py_atomic_load_relaxed(>gil_drop_request)) {
/* Give another thread a chance */
if (_PyThreadState_Swap(>gilstate, NULL) != tstate) {
Py_FatalError("tstate mix-up");
}
drop_gil(ceval, tstate);

/* Other threads may run now */

/* Check if we should make a quick exit. */
exit_thread_if_finalizing(tstate);

take_gil(ceval, tstate);

if (_PyThreadState_Swap(>gilstate, tstate) != NULL) {
Py_FatalError("orphan tstate");
}
}

At this point, one daemon thread manages to get the GIL: take_gil() 
completes... even if runtime->finalizing is not NULL. I expected that 
exit_thread_if_finalizing() would exit the thread, but 
exit_thread_if_finalizing() is now called *after* take_gil().

--

It's unclear to me when the GIL (the lock object) is destroyed and how we are 
supposed to destroy it, if an unknown number of daemon threads are waiting for 
it.

The GIL lock is created by PyEval_InitThreads(): create_gil() with 
MUTEX_INIT(gil->mutex).

The GIL lock is destroyed by _PyEval_FiniThreads(): destroy_gil() with 
MUTEX_FINI(gil->mutex).

--
resolution: fixed -> 
status: closed -> open

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-08 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18210
pull_request: https://github.com/python/cpython/pull/18848

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-08 Thread STINNER Victor


STINNER Victor  added the comment:

Ok, it should now be fixed.

Let me try to revisit the old bpo-19466 issue.

--
resolution:  -> fixed
stage: patch review -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-08 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset eb4e2ae2b8486e8ee4249218b95d94a9f0cc513e by Victor Stinner in 
branch 'master':
bpo-39877: Fix PyEval_RestoreThread() for daemon threads (GH-18811)
https://github.com/python/cpython/commit/eb4e2ae2b8486e8ee4249218b95d94a9f0cc513e


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


STINNER Victor  added the comment:


New changeset 7b3c252dc7f44d4bdc4c7c82d225ebd09c78f520 by Victor Stinner in 
branch 'master':
bpo-39877: _PyRuntimeState.finalizing becomes atomic (GH-18816)
https://github.com/python/cpython/commit/7b3c252dc7f44d4bdc4c7c82d225ebd09c78f520


--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18174
pull_request: https://github.com/python/cpython/pull/18816

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18169
pull_request: https://github.com/python/cpython/pull/18811

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


Change by STINNER Victor :


--
pull_requests: +18166
stage:  -> patch review
pull_request: https://github.com/python/cpython/pull/18808

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


STINNER Victor  added the comment:

Patch to get a cleaner error if the bug occurs, but also to make the bug more 
reliable:

diff --git a/Python/ceval.c b/Python/ceval.c
index ef4aac2f9a..8bf1e4766d 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -382,7 +382,8 @@ PyEval_SaveThread(void)
 void
 PyEval_RestoreThread(PyThreadState *tstate)
 {
-assert(tstate != NULL);
+assert(!_PyMem_IsPtrFreed(tstate));
+assert(!_PyMem_IsPtrFreed(tstate->interp));
 
 _PyRuntimeState *runtime = tstate->interp->runtime;
 struct _ceval_runtime_state *ceval = >ceval;

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


STINNER Victor  added the comment:

> This issue should be the root cause of bpo-39088: "test_concurrent_futures 
> crashed with python.core core dump on AMD64 FreeBSD Shared 3.x", (...)

I marked bpo-39088 as a duplicate of this issue.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


STINNER Victor  added the comment:

To reproduce the bug on Linux:

* apply attached slow_exit.patch to sleep 1 second just before exiting the 
process, in the main() function
* run: ./python daemon_threads_exit.py # attached file

Example:
---
$ ./python daemon_threads_exit.py 
Start 100 daemon threads
Exit Python main thread
Erreur de segmentation (core dumped)
---

--
keywords: +patch
Added file: https://bugs.python.org/file48959/slow_exit.patch

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


Change by STINNER Victor :


Added file: https://bugs.python.org/file48958/daemon_threads_exit.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue39877] Daemon thread is crashing in PyEval_RestoreThread() while the main thread is exiting the process

2020-03-06 Thread STINNER Victor


New submission from STINNER Victor :

Sometimes, test_multiprocessing_spawn does crash in PyEval_RestoreThread() on 
FreeBSD with a coredump. This issue should be the root cause of bpo-39088: 
"test_concurrent_futures crashed with python.core core dump on AMD64 FreeBSD 
Shared 3.x", where the second comment is a test_multiprocessing_spawn failure 
with "...  After:  ['python.core'] ..."

# Thread 1

(gdb) frame
#0  0x003b518c in PyEval_RestoreThread (tstate=0x801f23790) at 
Python/ceval.c:387
387 _PyRuntimeState *runtime = tstate->interp->runtime;
(gdb) p tstate->interp
$3 = (PyInterpreterState *) 0x

(gdb) info threads
  Id   Target Id Frame
* 1LWP 1008390x003b518c in PyEval_RestoreThread 
(tstate=0x801f23790) at Python/ceval.c:387
  2LWP 1002300x0008006fbcfc in _fini () from /lib/libm.so.5
  3LWP 100192_accept4 () at _accept4.S:3

# Thread 2

(gdb) thread 2
[Switching to thread 2 (LWP 100230)]
#0  0x0008006fbcfc in _fini () from /lib/libm.so.5

(gdb) where
(...)
#4  0x000800859431 in exit (status=0) at /usr/src/lib/libc/stdlib/exit.c:74
#5  0x0048f3d8 in Py_Exit (sts=0) at Python/pylifecycle.c:2349
(...)

The problem is that Python already freed the memory of all PyThreadState 
structures, whereas PyEval_RestoreThread(tstate) dereferences tstate to get the 
_PyRuntimeState structure:

void
PyEval_RestoreThread(PyThreadState *tstate)
{
assert(tstate != NULL);

_PyRuntimeState *runtime = tstate->interp->runtime;  // < HERE ===
struct _ceval_runtime_state *ceval = >ceval;
assert(gil_created(>gil));

int err = errno;
take_gil(ceval, tstate);
exit_thread_if_finalizing(tstate);
errno = err;

_PyThreadState_Swap(>gilstate, tstate);
}


I modified PyEval_RestoreThread(tstate) to get runtime from tstate: commit 
01b1cc12e7c6a3d6a3d27ba7c731687d57aae92a. Extract of the change:

diff --git a/Python/ceval.c b/Python/ceval.c
index 9f4b43615e..ee13fd1ad7 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -384,7 +386,7 @@ PyEval_SaveThread(void)
 void
 PyEval_RestoreThread(PyThreadState *tstate)
 {
-_PyRuntimeState *runtime = &_PyRuntime;
+_PyRuntimeState *runtime = tstate->interp->runtime;
 struct _ceval_runtime_state *ceval = >ceval;
 
 if (tstate == NULL) {
@@ -394,7 +396,7 @@ PyEval_RestoreThread(PyThreadState *tstate)
 
 int err = errno;
 take_gil(ceval, tstate);
-exit_thread_if_finalizing(runtime, tstate);
+exit_thread_if_finalizing(tstate);
 errno = err;
 
 _PyThreadState_Swap(>gilstate, tstate);


By the way, exit_thread_if_finalizing(tstate) also get runtime from state.


Before 01b1cc12e7c6a3d6a3d27ba7c731687d57aae92a, it was possible to call 
PyEval_RestoreThread() from a daemon thread even if tstate was a dangling 
pointer, since tstate wasn't dereferenced: _PyRuntime variable was accessed 
directly.

--

One simple fix is to access directly _PyRuntime in PyEval_RestoreThread() with 
a comment explaining why runtime is not get from tstate.

I'm concerned by the fact that only FreeBSD buildbot spotted the crash. 
test_multiprocessing_spawn seems to silently ignore crashes. The bug was only 
spotted because Python produced a coredump in the current directory. My Fedora 
31 doesn't write coredump files in the current files, and so the issue is 
silently ignored even when using --fail-env-changed.

IMHO the most reliable solution is to drop support for daemon threads: they are 
dangerous by design. But that would be an incompatible change. Maybe we should 
at least deprecate daemon threads. Python 3.9 now denies spawning a daemon 
thread in a Python subinterpreter: bpo-37266.

--
components: Interpreter Core
messages: 363512
nosy: eric.snow, nanjekyejoannah, ncoghlan, pablogsal, vstinner
priority: normal
severity: normal
status: open
title: Daemon thread is crashing in PyEval_RestoreThread() while the main 
thread is exiting the process
versions: Python 3.9

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com