STINNER Victor <vstin...@redhat.com> added the comment:

test_threading: test_threads_join_2() was added by commit 7b47699 in 2013, but 
the test failed randomly since it was added. It's just that failures were 
ignored until I created https://bugs.python.org/issue36402 last March.

In fact, when the test failed randomly on buildbot (with tests run in 
parallel), it was fine since test_threading was re-run alone and then the test 
passed. The buildbot build was seen overall as a success. Previous issues were 
closed (see my previous comment).

The test shows the bug using subinterpreters (Py_EndInterpreter), but the bug 
also exists in Py_Finalize() which hash the same race condition (it also calls 
threading._shutdown()). It's just that Py_EndInterpreter() is stricter, it 
contains this assertion:

    if (tstate != interp->tstate_head || tstate->next != NULL)
        Py_FatalError("Py_EndInterpreter: not the last thread");

Attached py_finalize.patch adds the same assertion to Py_Finalize.

I added test_threading.test_finalization_shutdown() to PR 13948. If you run 
test_finalization_shutdown() with py_finalize.patch, Py_Finalize() fails with a 
similar assertion error.

But py_finalize.patch is incompatible with the principle of daemon threads and 
so cannot be commited.

----------
Added file: https://bugs.python.org/file48409/py_finalize.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue36402>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to