mirror of
https://github.com/python/cpython.git
synced 2025-07-31 23:23:11 +00:00
bpo-1596321: Fix threading._shutdown() for the main thread (GH-28549)
Fix the threading._shutdown() function when the threading module was
imported first from a thread different than the main thread: no
longer log an error at Python exit.
(cherry picked from commit 95d3137082
)
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
c7fdd6879b
commit
38c67738c6
3 changed files with 53 additions and 8 deletions
|
@ -928,6 +928,39 @@ class ThreadTests(BaseTestCase):
|
|||
b'is deprecated and will be removed in Python 3.12')
|
||||
self.assertIn(msg, err)
|
||||
|
||||
def test_import_from_another_thread(self):
|
||||
# bpo-1596321: If the threading module is first import from a thread
|
||||
# different than the main thread, threading._shutdown() must handle
|
||||
# this case without logging an error at Python exit.
|
||||
code = textwrap.dedent('''
|
||||
import _thread
|
||||
import sys
|
||||
|
||||
event = _thread.allocate_lock()
|
||||
event.acquire()
|
||||
|
||||
def import_threading():
|
||||
import threading
|
||||
event.release()
|
||||
|
||||
if 'threading' in sys.modules:
|
||||
raise Exception('threading is already imported')
|
||||
|
||||
_thread.start_new_thread(import_threading, ())
|
||||
|
||||
# wait until the threading module is imported
|
||||
event.acquire()
|
||||
event.release()
|
||||
|
||||
if 'threading' not in sys.modules:
|
||||
raise Exception('threading is not imported')
|
||||
|
||||
# don't wait until the thread completes
|
||||
''')
|
||||
rc, out, err = assert_python_ok("-c", code)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertEqual(err, b'')
|
||||
|
||||
|
||||
class ThreadJoinOnShutdown(BaseTestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue