
commit 02f74f44f09efa9f854f830ae2a2f28514040e1d Author: Damian Johnson <atagar@torproject.org> Date: Tue Jul 21 17:52:44 2020 -0700 Fix stem.descriptor.remote deadlock Oops! While writing our Synchronous class I made our Query directly stop its loop, ending its loop thread. Our class internally expects our thread attribute to be None when its terminated, and as such wouldn't resume. To reproduce the deadlock I used the following script... import stem.descriptor.remote downloader = stem.descriptor.remote.DescriptorDownloader(validate = True) consensus_query = downloader.get_consensus() consensus_query.run() consensus = list(consensus_query) print('count: %s' % len(consensus)) --- stem/descriptor/remote.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stem/descriptor/remote.py b/stem/descriptor/remote.py index 2c97c361..96ffceed 100644 --- a/stem/descriptor/remote.py +++ b/stem/descriptor/remote.py @@ -475,7 +475,7 @@ class Query(Synchronous): return [desc async for desc in self._run(suppress)] finally: if stop: - self._loop.call_soon_threadsafe(self._loop.stop) + self.stop() async def _run(self, suppress: bool) -> AsyncIterator[stem.descriptor.Descriptor]: with self._downloader_lock:
participants (1)
-
atagar@torproject.org