| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -217,6 +217,14 @@ def _process_exited(self, returncode): | |||
| 217 | 217 | self._call(self._protocol.process_exited) | |
| 218 | 218 | ||
| 219 | 219 | self._try_finish() | |
| 220 | + self._wakeup_exit_waiters() | ||
| 221 | + | ||
| 222 | + def _wakeup_exit_waiters(self): | ||
| 223 | + # wake up futures waiting for wait() | ||
| 224 | + for waiter in self._exit_waiters: | ||
| 225 | + if not waiter.cancelled(): | ||
| 226 | + waiter.set_result(self._returncode) | ||
| 227 | + self._exit_waiters = [] | ||
| 220 | 228 | ||
| 221 | 229 | async def _wait(self): | |
| 222 | 230 | """Wait until the process exit and return the process return code. | |
@@ -242,11 +250,7 @@ def _call_connection_lost(self, exc): | |||
| 242 | 250 | try: | |
| 243 | 251 | self._protocol.connection_lost(exc) | |
| 244 | 252 | finally: | |
| 245 | - # wake up futures waiting for wait() | ||
| 246 | - for waiter in self._exit_waiters: | ||
| 247 | - if not waiter.cancelled(): | ||
| 248 | - waiter.set_result(self._returncode) | ||
| 249 | - self._exit_waiters = None | ||
| 253 | + self._wakeup_exit_waiters() | ||
| 250 | 254 | self._loop = None | |
| 251 | 255 | self._proc = None | |
| 252 | 256 | self._protocol = None | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,3 @@ | |||
| 1 | + Exit waiters are not resolved after subprocess handled by asyncio.Task | ||
| 2 | + exits. This will causes a recent `asyncio.wait` call hang forever if there | ||
| 3 | + are objects that are not `Awaitable` yield from its first parameter. | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments