Issue #28448: Fix C implemented asyncio.Future didn't work on Windows

This commit is contained in:
INADA Naoki 2016-10-21 12:30:15 +09:00
parent 56b2cf5e85
commit a83636247e
8 changed files with 109 additions and 8 deletions

View file

@ -247,10 +247,10 @@ class Future:
if self._state != _PENDING:
return False
self._state = _CANCELLED
self._schedule_callbacks()
self.__schedule_callbacks()
return True
def _schedule_callbacks(self):
def __schedule_callbacks(self):
"""Internal: Ask the event loop to call all callbacks.
The callbacks are scheduled to be called as soon as possible. Also
@ -352,7 +352,7 @@ class Future:
raise InvalidStateError('{}: {!r}'.format(self._state, self))
self._result = result
self._state = _FINISHED
self._schedule_callbacks()
self.__schedule_callbacks()
def set_exception(self, exception):
"""Mark the future done and set an exception.
@ -369,7 +369,7 @@ class Future:
"and cannot be raised into a Future")
self._exception = exception
self._state = _FINISHED
self._schedule_callbacks()
self.__schedule_callbacks()
if compat.PY34:
self._log_traceback = True
else:

View file

@ -171,8 +171,13 @@ class _WaitCancelFuture(_BaseWaitHandleFuture):
def cancel(self):
raise RuntimeError("_WaitCancelFuture must not be cancelled")
def _schedule_callbacks(self):
super(_WaitCancelFuture, self)._schedule_callbacks()
def set_result(self, result):
super().set_result(result)
if self._done_callback is not None:
self._done_callback(self)
def set_exception(self, exception):
super().set_exception(exception)
if self._done_callback is not None:
self._done_callback(self)