[tor-commits] [stem/master] Start canceling pending tasks while closing a controller

atagar at torproject.org atagar at torproject.org
Thu Jul 16 01:28:58 UTC 2020


commit 1072a8eef7b6d6327e0b329488d868439fc8d6df
Author: Illia Volochii <illia.volochii at gmail.com>
Date:   Tue Apr 14 23:59:32 2020 +0300

    Start canceling pending tasks while closing a controller
---
 stem/control.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/stem/control.py b/stem/control.py
index 435fb741..b7ebe740 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -546,6 +546,7 @@ class BaseController(object):
     self._socket = control_socket
 
     self._asyncio_loop = asyncio.get_event_loop()
+    self._asyncio_loop_tasks = []
 
     self._msg_lock = threading.RLock()
 
@@ -724,6 +725,9 @@ class BaseController(object):
 
     await self._socket.close()
 
+    for task in self._asyncio_loop_tasks:
+      task.cancel()
+
     # Join on any outstanding state change listeners. Closing is a state change
     # of its own, so if we have any listeners it's quite likely there's some
     # work in progress.
@@ -898,8 +902,8 @@ class BaseController(object):
     them if we're restarted.
     """
 
-    self._asyncio_loop.create_task(self._reader_loop())
-    self._asyncio_loop.create_task(self._event_loop())
+    for coroutine in (self._reader_loop(), self._event_loop()):
+      self._asyncio_loop_tasks.append(self._asyncio_loop.create_task(coroutine))
 
 
   async def _reader_loop(self) -> None:





More information about the tor-commits mailing list