From a2d0e9a29b81ad63b508dd8b8cf2f11a9b60990f Mon Sep 17 00:00:00 2001 From: Eryx-Z Date: Sat, 17 Oct 2026 06:52:22 +0800 Subject: [PATCH] Guard Server.close/_unref when constructed with loop=None Server(None) is constructible from Python; close() then segfaulted in _unref via self._loop._servers. Return early when _loop is missing so invalid construction raises a clean error path instead of crashing. Fixes #760 --- uvloop/server.pyx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/uvloop/server.pyx b/uvloop/server.pyx index 845bcfda..2dedbcc8 100644 --- a/uvloop/server.pyx +++ b/uvloop/server.pyx @@ -44,6 +44,9 @@ cdef class Server: self._loop._servers.add(self) cdef _unref(self): + # Server(None) is constructible from Python; guard before touching _loop. + if self._loop is None: + return self._loop._servers.discard(self) # Public API @@ -77,6 +80,9 @@ cdef class Server: def close(self): cdef list servers + if self._loop is None: + return + if self._servers is None: return