]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-33469: RuntimeError after closing loop that used run_in_executor (GH-7171)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 29 May 2018 01:32:17 +0000 (18:32 -0700)
committerGitHub <noreply@github.com>
Tue, 29 May 2018 01:32:17 +0000 (18:32 -0700)
(cherry picked from commit fdccfe09f0b10776645fdb04a0783d6864c32b21)

Co-authored-by: Yury Selivanov <yury@magic.io>
Lib/asyncio/futures.py
Lib/test/test_asyncio/test_events.py
Misc/NEWS.d/next/Library/2018-05-28-15-55-12.bpo-33469.hmXBpY.rst [new file with mode: 0644]

index 9ff143039a3280d7784c25497e97115428ef5789..3a0b57e30eab5fae43d821047138567df85d90eb 100644 (file)
@@ -408,6 +408,9 @@ def _chain_future(source, 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:
index 2c4629ab49246639ffd869d2d8a44ecfbd03a109..1ecc89f2e758f8f22d31e6a592782860d88a14a4 100644 (file)
@@ -362,6 +362,24 @@ class EventLoopTestsMixin:
         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)
diff --git a/Misc/NEWS.d/next/Library/2018-05-28-15-55-12.bpo-33469.hmXBpY.rst b/Misc/NEWS.d/next/Library/2018-05-28-15-55-12.bpo-33469.hmXBpY.rst
new file mode 100644 (file)
index 0000000..cc1b2e4
--- /dev/null
@@ -0,0 +1 @@
+Fix RuntimeError after closing loop that used run_in_executor