Skip to content

Commit 6440c3f

Browse files
committed
transport: Avoid doing an extra call_soon call for waiter wakeup
1 parent 6ab7ef5 commit 6440c3f

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

uvloop/handles/transport.pyx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,29 @@ cdef class UVTransport(UVStream):
185185
<method_t*>&self._start_reading,
186186
self))
187187

188+
if self._waiter is not None:
189+
if not self._waiter.cancelled():
190+
self._waiter.set_result(True)
191+
self._waiter = None
192+
188193
cdef _schedule_call_connection_made(self):
189194
self._loop._call_soon_handle(
190195
new_MethodHandle(self._loop,
191196
"UVTransport._call_connection_made",
192197
<method_t*>&self._call_connection_made,
193198
self))
194199

200+
cdef _call_connection_lost(self, exc):
195201
if self._waiter is not None:
196-
self._loop.call_soon(
197-
_set_result_unless_cancelled, self._waiter, True)
202+
# This shouldn't ever happen!
203+
self._loop.call_exception_handler({
204+
'message': 'waiter is not None in {}._call_connection_lost'.
205+
format(self.__class__.__name__)
206+
})
207+
if not self._waiter.done():
208+
self._waiter.set_exception(exc)
198209
self._waiter = None
199210

200-
cdef _call_connection_lost(self, exc):
201211
if self._closed:
202212
# The handle is closed -- likely, _call_connection_lost
203213
# was already called before.

0 commit comments

Comments
 (0)