From 752f7c1629a6aba3298f7c0f371eb2ddd3ec7c44 Mon Sep 17 00:00:00 2001 From: Todd Sankey Date: Mon, 25 Nov 2024 09:16:38 -0800 Subject: [PATCH] Fix for unexpected socket closures and data leakage under heavy load --- uvloop/loop.pyx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index f9a5a239..6a738f20 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -1877,6 +1877,7 @@ cdef class Loop: AddrInfo ai_local = None AddrInfo ai_remote TCPTransport tr + int sockfd system.addrinfo *rai = NULL system.addrinfo *lai = NULL @@ -2060,8 +2061,10 @@ cdef class Loop: waiter = self._new_future() tr = TCPTransport.new(self, protocol, None, waiter, context) try: + # Take ownership of the file descriptor + sockfd = sock.detach() # libuv will make socket non-blocking - tr._open(sock.fileno()) + tr._open(sockfd) tr._init_protocol() await waiter except (KeyboardInterrupt, SystemExit): @@ -2075,8 +2078,6 @@ cdef class Loop: tr._close() raise - tr._attach_fileobj(sock) - if ssl: app_transport = protocol._get_app_transport(context) try: