HomeAleph Objects Inc

bpo-36402: Fix threading._shutdown() race condition (GH-13948)

Authored by Victor Stinner <vstinner@redhat.com> on Wed, Jun 12, 5:30 PM.

Description

bpo-36402: Fix threading._shutdown() race condition (GH-13948)

Fix a race condition at Python shutdown when waiting for threads.
Wait until the Python thread state of all non-daemon threads get
deleted (join all non-daemon threads), rather than just wait until
Python threads complete.

  • Add threading._shutdown_locks: set of Thread._tstate_lock locks of non-daemon threads used by _shutdown() to wait until all Python thread states get deleted. See Thread._set_tstate_lock().
  • Add also threading._shutdown_locks_lock to protect access to threading._shutdown_locks.
  • Add test_finalization_shutdown() test.

(cherry picked from commit 468e5fec8a2f534f1685d59da3ca4fad425c38dd)

Details

Event Timeline

Victor Stinner <vstinner@redhat.com> committed rCP9aba352c22e7: bpo-36402: Fix threading._shutdown() race condition (GH-13948) (authored by Victor Stinner <vstinner@redhat.com>).Thu, Jun 13, 4:08 AM