mirror of
https://github.com/python/cpython.git
synced 2026-01-20 22:30:28 +00:00
bpo-33469: RuntimeError after closing loop that used run_in_executor (GH-7171)
(cherry picked from commit fdccfe09f0)
Co-authored-by: Yury Selivanov <yury@magic.io>
This commit is contained in:
parent
d8af830243
commit
a6d6bd70ac
3 changed files with 22 additions and 0 deletions
|
|
@ -408,6 +408,9 @@ def _call_check_cancel(destination):
|
|||
source_loop.call_soon_threadsafe(source.cancel)
|
||||
|
||||
def _call_set_state(source):
|
||||
if (destination.cancelled() and
|
||||
dest_loop is not None and dest_loop.is_closed()):
|
||||
return
|
||||
if dest_loop is None or dest_loop is source_loop:
|
||||
_set_state(destination, source)
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -362,6 +362,24 @@ def run(arg):
|
|||
self.assertEqual(res, 'yo')
|
||||
self.assertNotEqual(thread_id, threading.get_ident())
|
||||
|
||||
def test_run_in_executor_cancel(self):
|
||||
called = False
|
||||
|
||||
def patched_call_soon(*args):
|
||||
nonlocal called
|
||||
called = True
|
||||
|
||||
def run():
|
||||
time.sleep(0.05)
|
||||
|
||||
f2 = self.loop.run_in_executor(None, run)
|
||||
f2.cancel()
|
||||
self.loop.close()
|
||||
self.loop.call_soon = patched_call_soon
|
||||
self.loop.call_soon_threadsafe = patched_call_soon
|
||||
time.sleep(0.4)
|
||||
self.assertFalse(called)
|
||||
|
||||
def test_reader_callback(self):
|
||||
r, w = test_utils.socketpair()
|
||||
r.setblocking(False)
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Fix RuntimeError after closing loop that used run_in_executor
|
||||
Loading…
Add table
Add a link
Reference in a new issue