Skip to content

Commit eaaeb8f

Browse files
committed
Further optimize sock_recv & sock_sendall--make less selector calls
1 parent dba39bd commit eaaeb8f

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

uvloop/loop.pyx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -555,13 +555,9 @@ cdef class Loop:
555555
Handle handle
556556

557557
fd = sock.fileno()
558-
if registered:
559-
# Remove the callback early. It should be rare that the
560-
# selector says the fd is ready but the call still returns
561-
# EAGAIN, and I am willing to take a hit in that case in
562-
# order to simplify the common case.
563-
self._remove_reader(fd)
564558
if fut.cancelled():
559+
if registered:
560+
self._remove_reader(fd)
565561
return
566562
try:
567563
data = sock.recv(n)
@@ -576,21 +572,25 @@ cdef class Loop:
576572
self._add_reader(fd, handle)
577573
except Exception as exc:
578574
fut.set_exception(exc)
575+
if registered:
576+
self._remove_reader(fd)
579577
else:
580578
IF DEBUG:
581579
if not registered:
582580
self._sock_try_read_total += 1
583581
fut.set_result(data)
582+
if registered:
583+
self._remove_reader(fd)
584584

585585
cdef _sock_sendall(self, fut, int registered, sock, data):
586586
cdef:
587587
Handle handle
588588

589589
fd = sock.fileno()
590590

591-
if registered:
592-
self._remove_writer(fd)
593591
if fut.cancelled():
592+
if registered:
593+
self._remove_writer(fd)
594594
return
595595

596596
try:
@@ -599,6 +599,8 @@ cdef class Loop:
599599
n = 0
600600
except Exception as exc:
601601
fut.set_exception(exc)
602+
if registered:
603+
self._remove_writer(fd)
602604
return
603605
else:
604606
IF DEBUG:
@@ -609,6 +611,8 @@ cdef class Loop:
609611

610612
if n == len(data):
611613
fut.set_result(None)
614+
if registered:
615+
self._remove_writer(fd)
612616
else:
613617
if n:
614618
if not isinstance(data, memoryview):

0 commit comments

Comments
 (0)