summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-07-25 20:40:12 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-07-25 20:40:12 (GMT)
commit19e020c5c713fcf24d66d72f5e599d57e8841360 (patch)
tree2373e45b49a13367def4bc4d530e8c83d100fa6a
parent465e60e654732b3a0b726d1fd82950fc982fcba2 (diff)
parent65dd69a3da16257bd86b92900e5ec5a8dd26f1d9 (diff)
downloadcpython-19e020c5c713fcf24d66d72f5e599d57e8841360.zip
cpython-19e020c5c713fcf24d66d72f5e599d57e8841360.tar.gz
cpython-19e020c5c713fcf24d66d72f5e599d57e8841360.tar.bz2
(Merge 3.4) asyncio: sync with Tulip
* Tulip issue #196: IocpProactor._poll() clears the reference to the overlapped operation when the operation is done. It would be better to clear the reference in a new _OverlappedFuture.set_result() method, but it cannot be done yet because of a weird bug. * BaseSelectorEventLoop._write_to_self() now logs errors in debug mode.
-rw-r--r--Lib/asyncio/selector_events.py5
-rw-r--r--Lib/asyncio/windows_events.py5
2 files changed, 9 insertions, 1 deletions
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index cd1a75a..eca48b8 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -120,7 +120,10 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
try:
csock.send(b'\0')
except OSError:
- pass
+ if self._debug:
+ logger.debug("Fail to write a null byte into the "
+ "self-pipe socket",
+ exc_info=True)
def _start_serving(self, protocol_factory, sock,
sslcontext=None, server=None):
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
index 375003c..65ecf34 100644
--- a/Lib/asyncio/windows_events.py
+++ b/Lib/asyncio/windows_events.py
@@ -489,6 +489,11 @@ class IocpProactor:
else:
f.set_result(value)
self._results.append(f)
+ # FIXME, tulip issue #196: add _OverlappedFuture.set_result()
+ # method to clear the refrence, don't do it here (f may
+ # by a _WaitHandleFuture). Problem: clearing the reference
+ # in _register() if ov.pedding is False leads to weird bugs.
+ f._ov = None
ms = 0
def _stop_serving(self, obj):