From 83ae19d273bed781e653cdcfe55b9127ef2fbb58 Mon Sep 17 00:00:00 2001 From: Alan Brooks <12380017+alan-brooks@users.noreply.github.com> Date: Thu, 28 Dec 2023 12:18:15 +0000 Subject: [PATCH 01/15] Updates for Cython3 Remove SSL depreciation warnings buillt on debian 12.6 python-3.22 Cython-3.0.7 libuv-1.46.0 --- Makefile | 2 +- setup.py | 6 ++++-- tests/test_process.py | 4 ++-- tests/test_tcp.py | 19 ++++++++++++------- uvloop/_testbase.py | 4 +++- uvloop/cbhandles.pyx | 4 ++-- uvloop/dns.pyx | 4 ++-- uvloop/handles/basetransport.pxd | 4 ++-- uvloop/handles/basetransport.pyx | 4 ++-- uvloop/handles/handle.pyx | 2 +- uvloop/handles/pipe.pyx | 2 +- uvloop/handles/poll.pxd | 2 +- uvloop/handles/poll.pyx | 2 +- uvloop/handles/stream.pyx | 16 ++++++++++------ uvloop/handles/udp.pyx | 4 ++-- uvloop/includes/consts.pxi | 25 ------------------------- uvloop/includes/fork_handler.h | 6 +++++- uvloop/includes/system.h | 16 ++++++++++++++++ uvloop/includes/system.pxd | 12 ++++-------- uvloop/includes/uv.pxd | 6 +++--- uvloop/loop.pxd | 28 ++++++++++++++++++++++++---- uvloop/loop.pyx | 10 +++++----- uvloop/sslproto.pxd | 4 ++-- uvloop/sslproto.pyx | 4 ++-- 24 files changed, 107 insertions(+), 83 deletions(-) delete mode 100644 uvloop/includes/consts.pxi create mode 100755 uvloop/includes/system.h diff --git a/Makefile b/Makefile index 4375e5d2..6a0475a9 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ _default: compile clean: - rm -fr dist/ doc/_build/ *.egg-info uvloop/loop.*.pyd + rm -fr dist/ doc/_build/ *.egg-info uvloop/loop.*.pyd uvloop/loop_d.*.pyd rm -fr uvloop/*.c uvloop/*.html uvloop/*.so rm -fr uvloop/handles/*.html uvloop/includes/*.html find . -name '__pycache__' | xargs rm -rf diff --git a/setup.py b/setup.py index ba15af50..8fdf0e56 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ from setuptools.command.sdist import sdist -CYTHON_DEPENDENCY = 'Cython(>=0.29.36,<0.30.0)' +CYTHON_DEPENDENCY = 'Cython(>=0.29.36)' MACHINE = platform.machine() MODULES_CFLAGS = [os.getenv('UVLOOP_OPT_CFLAGS', '-O2')] _ROOT = pathlib.Path(__file__).parent @@ -144,7 +144,9 @@ def finalize_options(self): self.distribution.ext_modules[:] = cythonize( self.distribution.ext_modules, compiler_directives=directives, - annotate=self.cython_annotate) + annotate=self.cython_annotate, + compile_time_env=dict(DEFAULT_FREELIST_SIZE=250, SSL_READ_MAX_SIZE=256 * 1024), + emit_linenums=True) super().finalize_options() diff --git a/tests/test_process.py b/tests/test_process.py index bfcbba17..95e1c9e7 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -912,7 +912,7 @@ def test_process_delayed_stdio__paused__stdin_pipe(self): stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - __uvloop_sleep_after_fork=True)) + uvloop_sleep_after_fork=True)) self.assertIsNot(transport, None) self.assertEqual(transport.get_returncode(), 0) self.assertEqual( @@ -931,7 +931,7 @@ def test_process_delayed_stdio__paused__no_stdin(self): stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - __uvloop_sleep_after_fork=True)) + uvloop_sleep_after_fork=True)) self.assertIsNot(transport, None) self.assertEqual(transport.get_returncode(), 0) self.assertEqual( diff --git a/tests/test_tcp.py b/tests/test_tcp.py index 812e62b8..213e2d9f 100644 --- a/tests/test_tcp.py +++ b/tests/test_tcp.py @@ -1630,17 +1630,22 @@ async def client(addr): self.fail("unexpected call to connection_made()") def test_ssl_connect_accepted_socket(self): - if hasattr(ssl, 'PROTOCOL_TLS'): - proto = ssl.PROTOCOL_TLS + if hasattr(ssl, 'PROTOCOL_TLS_SERVER'): + server_proto = ssl.PROTOCOL_TLS_SERVER + client_proto = ssl.PROTOCOL_TLS_CLIENT else: - proto = ssl.PROTOCOL_SSLv23 - server_context = ssl.SSLContext(proto) + if hasattr(ssl, 'PROTOCOL_TLS'): + client_proto = server_proto = ssl.PROTOCOL_TLS + else: + client_proto = server_proto = ssl.PROTOCOL_SSLv23 + + server_context = ssl.SSLContext(server_proto) server_context.load_cert_chain(self.ONLYCERT, self.ONLYKEY) if hasattr(server_context, 'check_hostname'): server_context.check_hostname = False server_context.verify_mode = ssl.CERT_NONE - client_context = ssl.SSLContext(proto) + client_context = ssl.SSLContext(client_proto) if hasattr(server_context, 'check_hostname'): client_context.check_hostname = False client_context.verify_mode = ssl.CERT_NONE @@ -2233,7 +2238,7 @@ def test_renegotiation(self): sslctx.use_privatekey_file(self.ONLYKEY) sslctx.use_certificate_chain_file(self.ONLYCERT) client_sslctx = self._create_client_ssl_context() - if hasattr(ssl, 'OP_NO_TLSv1_3'): + if sys.version_info < (3, 8) and hasattr(ssl, 'OP_NO_TLSv1_3'): client_sslctx.options |= ssl.OP_NO_TLSv1_3 def server(sock): @@ -2592,7 +2597,7 @@ def test_flush_before_shutdown(self): sslctx_openssl.use_privatekey_file(self.ONLYKEY) sslctx_openssl.use_certificate_chain_file(self.ONLYCERT) client_sslctx = self._create_client_ssl_context() - if hasattr(ssl, 'OP_NO_TLSv1_3'): + if sys.version_info < (3, 8) and hasattr(ssl, 'OP_NO_TLSv1_3'): client_sslctx.options |= ssl.OP_NO_TLSv1_3 future = None diff --git a/uvloop/_testbase.py b/uvloop/_testbase.py index c4a7595b..e620e158 100644 --- a/uvloop/_testbase.py +++ b/uvloop/_testbase.py @@ -269,7 +269,9 @@ def find_free_port(start_from=50000): class SSLTestCase: def _create_server_ssl_context(self, certfile, keyfile=None): - if hasattr(ssl, 'PROTOCOL_TLS'): + if hasattr(ssl, 'PROTOCOL_TLS_SERVER'): + sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + elif hasattr(ssl, 'PROTOCOL_TLS'): sslcontext = ssl.SSLContext(ssl.PROTOCOL_TLS) else: sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) diff --git a/uvloop/cbhandles.pyx b/uvloop/cbhandles.pyx index 2914b42e..8bcc5aa6 100644 --- a/uvloop/cbhandles.pyx +++ b/uvloop/cbhandles.pyx @@ -76,8 +76,8 @@ cdef class Handle: self.arg1, self.arg2, self.arg3, self.arg4) else: - raise RuntimeError('invalid Handle.cb_type: {}'.format( - cb_type)) + raise RuntimeError('invalid Handle.cb_type: {} {!r}/{!r}'.format( + cb_type, self.args1, self.args2)) except (KeyboardInterrupt, SystemExit): raise diff --git a/uvloop/dns.pyx b/uvloop/dns.pyx index 7aad6319..09b92828 100644 --- a/uvloop/dns.pyx +++ b/uvloop/dns.pyx @@ -298,7 +298,7 @@ cdef class AddrInfo: uv.uv_freeaddrinfo(self.data) # returns void self.data = NULL - cdef void set_data(self, system.addrinfo *data): + cdef void set_data(self, system.addrinfo *data) noexcept: self.data = data cdef unpack(self): @@ -326,7 +326,7 @@ cdef class AddrInfo: return result @staticmethod - cdef int isinstance(object other): + cdef int isinstance(object other) noexcept: return type(other) is AddrInfo diff --git a/uvloop/handles/basetransport.pxd b/uvloop/handles/basetransport.pxd index ba356a78..8112622c 100644 --- a/uvloop/handles/basetransport.pxd +++ b/uvloop/handles/basetransport.pxd @@ -47,8 +47,8 @@ cdef class UVBaseTransport(UVSocketHandle): # === overloads === cdef _new_socket(self) - cdef size_t _get_write_buffer_size(self) + cdef size_t _get_write_buffer_size(self) noexcept - cdef bint _is_reading(self) + cdef bint _is_reading(self) noexcept cdef _start_reading(self) cdef _stop_reading(self) diff --git a/uvloop/handles/basetransport.pyx b/uvloop/handles/basetransport.pyx index 28b30794..a8592f2d 100644 --- a/uvloop/handles/basetransport.pyx +++ b/uvloop/handles/basetransport.pyx @@ -18,7 +18,7 @@ cdef class UVBaseTransport(UVSocketHandle): self._closing = 0 - cdef size_t _get_write_buffer_size(self): + cdef size_t _get_write_buffer_size(self) noexcept: return 0 cdef inline _schedule_call_connection_made(self): @@ -211,7 +211,7 @@ cdef class UVBaseTransport(UVSocketHandle): self._extra_info = {} self._extra_info[name] = obj - cdef bint _is_reading(self): + cdef bint _is_reading(self) noexcept: raise NotImplementedError cdef _start_reading(self): diff --git a/uvloop/handles/handle.pyx b/uvloop/handles/handle.pyx index 6efe3755..2c96458b 100644 --- a/uvloop/handles/handle.pyx +++ b/uvloop/handles/handle.pyx @@ -363,7 +363,7 @@ cdef void __uv_close_handle_cb(uv.uv_handle_t* handle) noexcept with gil: Py_DECREF(h) # Was INCREFed in UVHandle._close -cdef void __close_all_handles(Loop loop): +cdef void __close_all_handles(Loop loop) noexcept: uv.uv_walk(loop.uvloop, __uv_walk_close_all_handles_cb, loop) # void diff --git a/uvloop/handles/pipe.pyx b/uvloop/handles/pipe.pyx index 195576c7..d30a7366 100644 --- a/uvloop/handles/pipe.pyx +++ b/uvloop/handles/pipe.pyx @@ -25,7 +25,7 @@ cdef __pipe_init_uv_handle(UVStream handle, Loop loop): cdef __pipe_open(UVStream handle, int fd): cdef int err err = uv.uv_pipe_open(handle._handle, - fd) + fd) if err < 0: exc = convert_error(err) raise exc diff --git a/uvloop/handles/poll.pxd b/uvloop/handles/poll.pxd index d07030b5..c2205402 100644 --- a/uvloop/handles/poll.pxd +++ b/uvloop/handles/poll.pxd @@ -10,7 +10,7 @@ cdef class UVPoll(UVHandle): cdef inline _poll_start(self, int flags) cdef inline _poll_stop(self) - cdef int is_active(self) + cdef int is_active(self) noexcept cdef is_reading(self) cdef is_writing(self) diff --git a/uvloop/handles/poll.pyx b/uvloop/handles/poll.pyx index fca5981e..c905e9b0 100644 --- a/uvloop/handles/poll.pyx +++ b/uvloop/handles/poll.pyx @@ -29,7 +29,7 @@ cdef class UVPoll(UVHandle): handle._init(loop, fd) return handle - cdef int is_active(self): + cdef int is_active(self) noexcept: return (self.reading_handle is not None or self.writing_handle is not None) diff --git a/uvloop/handles/stream.pyx b/uvloop/handles/stream.pyx index d4e02e3e..09df8878 100644 --- a/uvloop/handles/stream.pyx +++ b/uvloop/handles/stream.pyx @@ -1,4 +1,8 @@ -DEF __PREALLOCED_BUFS = 4 +cdef extern from *: + ''' + enum {__PREALLOCED_BUFS = 4}; + ''' + const bint __PREALLOCED_BUFS @cython.no_gc_clear @@ -279,7 +283,7 @@ cdef class UVStream(UVBaseTransport): cdef inline _close_on_read_error(self): self.__read_error_close = 1 - cdef bint _is_reading(self): + cdef bint _is_reading(self) noexcept: return self.__reading cdef _start_reading(self): @@ -578,7 +582,7 @@ cdef class UVStream(UVBaseTransport): self._maybe_resume_protocol() - cdef size_t _get_write_buffer_size(self): + cdef size_t _get_write_buffer_size(self) noexcept: if self._handle is NULL: return 0 return ((self._handle).write_queue_size + @@ -755,7 +759,7 @@ cdef inline bint __uv_stream_on_read_common( UVStream sc, Loop loop, ssize_t nread, -): +) noexcept: if sc._closed: # The stream was closed, there is no reason to # do any work now. @@ -818,7 +822,7 @@ cdef inline void __uv_stream_on_read_impl( uv.uv_stream_t* stream, ssize_t nread, const uv.uv_buf_t* buf, -): +) noexcept: cdef: UVStream sc = stream.data Loop loop = sc._loop @@ -849,7 +853,7 @@ cdef inline void __uv_stream_on_read_impl( cdef inline void __uv_stream_on_write_impl( uv.uv_write_t* req, int status, -): +) noexcept: cdef: _StreamWriteContext ctx = <_StreamWriteContext> req.data UVStream stream = ctx.stream diff --git a/uvloop/handles/udp.pyx b/uvloop/handles/udp.pyx index bbe60d56..fdd1d8b2 100644 --- a/uvloop/handles/udp.pyx +++ b/uvloop/handles/udp.pyx @@ -127,12 +127,12 @@ cdef class UDPTransport(UVBaseTransport): exc = convert_error(err) raise exc - cdef size_t _get_write_buffer_size(self): + cdef size_t _get_write_buffer_size(self) noexcept: if self._handle is NULL: return 0 return (self._handle).send_queue_size - cdef bint _is_reading(self): + cdef bint _is_reading(self) noexcept: return self.__receiving cdef _start_reading(self): diff --git a/uvloop/includes/consts.pxi b/uvloop/includes/consts.pxi deleted file mode 100644 index f765053d..00000000 --- a/uvloop/includes/consts.pxi +++ /dev/null @@ -1,25 +0,0 @@ -DEF UV_STREAM_RECV_BUF_SIZE = 256000 # 250kb - -DEF FLOW_CONTROL_HIGH_WATER = 64 # KiB -DEF FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB -DEF FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB - -DEF DEFAULT_FREELIST_SIZE = 250 -DEF DNS_PYADDR_TO_SOCKADDR_CACHE_SIZE = 2048 - -DEF DEBUG_STACK_DEPTH = 10 - - -DEF __PROCESS_DEBUG_SLEEP_AFTER_FORK = 1 - - -DEF LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5 - - -# Number of seconds to wait for SSL handshake to complete -# The default timeout matches that of Nginx. -DEF SSL_HANDSHAKE_TIMEOUT = 60.0 -# Number of seconds to wait for SSL shutdown to complete -# The default timeout mimics lingering_time -DEF SSL_SHUTDOWN_TIMEOUT = 30.0 -DEF SSL_READ_MAX_SIZE = 256 * 1024 diff --git a/uvloop/includes/fork_handler.h b/uvloop/includes/fork_handler.h index 47bbe036..9d3573ae 100644 --- a/uvloop/includes/fork_handler.h +++ b/uvloop/includes/fork_handler.h @@ -1,7 +1,10 @@ +#ifndef UVLOOP_FORK_HANDLER_H_ +#define UVLOOP_FORK_HANDLER_H_ + volatile uint64_t MAIN_THREAD_ID = 0; volatile int8_t MAIN_THREAD_ID_SET = 0; -typedef void (*OnForkHandler)(); +typedef void (*OnForkHandler)(void); OnForkHandler __forkHandler = NULL; @@ -36,3 +39,4 @@ void setMainThreadID(uint64_t id) { MAIN_THREAD_ID = id; MAIN_THREAD_ID_SET = 1; } +#endif diff --git a/uvloop/includes/system.h b/uvloop/includes/system.h new file mode 100755 index 00000000..e143bb5c --- /dev/null +++ b/uvloop/includes/system.h @@ -0,0 +1,16 @@ +#ifndef UVLOOP_SYSTEM_H_ +#define UVLOOP_SYSTEM_H_ +#if defined(_WIN32) || defined(MS_WINDOWS) || defined(_MSC_VER) +#include "Winsock2.h" +#include "ws2def.h" +#include "includes/fork_handler.h" +#else +#include "arpa/inet.h" +#include "sys/socket.h" +#include "sys/un.h" +#include "unistd.h" +#include "pthread.h" +#endif +#endif + + diff --git a/uvloop/includes/system.pxd b/uvloop/includes/system.pxd index 367fedd1..d1da74ed 100644 --- a/uvloop/includes/system.pxd +++ b/uvloop/includes/system.pxd @@ -1,13 +1,9 @@ from libc.stdint cimport int8_t, uint64_t -cdef extern from "arpa/inet.h" nogil: - - int ntohl(int) - int htonl(int) - int ntohs(int) - - -cdef extern from "sys/socket.h" nogil: +cdef extern from "includes/system.h": + int ntohl(int) nogil + int htonl(int) nogil + int ntohs(int) nogil struct sockaddr: unsigned short sa_family diff --git a/uvloop/includes/uv.pxd b/uvloop/includes/uv.pxd index 87651306..ddd9738c 100644 --- a/uvloop/includes/uv.pxd +++ b/uvloop/includes/uv.pxd @@ -220,7 +220,7 @@ cdef extern from "uv.h" nogil: UV_LEAVE_GROUP = 0, UV_JOIN_GROUP - cpdef enum uv_fs_event: + cdef enum uv_fs_event: UV_RENAME = 1, UV_CHANGE = 2 @@ -282,7 +282,7 @@ cdef extern from "uv.h" nogil: int uv_loop_close(uv_loop_t* loop) int uv_loop_alive(uv_loop_t* loop) int uv_loop_fork(uv_loop_t* loop) - int uv_backend_fd(uv_loop_t* loop) + uv_os_fd_t uv_backend_fd(uv_loop_t* loop) void uv_update_time(uv_loop_t* loop) uint64_t uv_now(const uv_loop_t*) @@ -378,7 +378,7 @@ cdef extern from "uv.h" nogil: # Pipes int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) - int uv_pipe_open(uv_pipe_t* handle, uv_file file) + int uv_pipe_open(uv_pipe_t* handle, uv_os_fd_t file) int uv_pipe_bind(uv_pipe_t* handle, const char* name) void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, diff --git a/uvloop/loop.pxd b/uvloop/loop.pxd index 56134733..f90c7041 100644 --- a/uvloop/loop.pxd +++ b/uvloop/loop.pxd @@ -1,15 +1,35 @@ # cython: language_level=3 +cdef extern from *: + ''' + enum { UV_STREAM_RECV_BUF_SIZE = 256000, + SSL_READ_MAX_SIZE = 256 * 1024, // 250kb + }; + const float SSL_HANDSHAKE_TIMEOUT = 60.0; // Number of seconds to wait for SSL handshake to complete The default timeout matches that of Nginx. + const float SSL_SHUTDOWN_TIMEOUT = 30.0; // Number of seconds to wait for SSL shutdown to complete The default timeout mimics lingering_time + ''' + const bint UV_STREAM_RECV_BUF_SIZE + const bint SSL_READ_MAX_SIZE + + const float SSL_HANDSHAKE_TIMEOUT + const float SSL_SHUTDOWN_TIMEOUT + +cdef enum: + FLOW_CONTROL_HIGH_WATER = 64 # KiB + FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB + FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB + + DNS_PYADDR_TO_SOCKADDR_CACHE_SIZE = 2048 + DEBUG_STACK_DEPTH = 10 + __PROCESS_DEBUG_SLEEP_AFTER_FORK = 1 + LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5 + from .includes cimport uv from .includes cimport system from libc.stdint cimport uint64_t, uint32_t, int64_t - -include "includes/consts.pxi" - - cdef extern from *: ctypedef int vint "volatile int" diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 334d8d50..53e11600 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -43,7 +43,7 @@ from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer from . import _noop -include "includes/consts.pxi" + include "includes/stdlib.pxi" include "errors.pyx" @@ -1118,7 +1118,7 @@ cdef class Loop: cdef _sock_set_reuseport(self, int fd): cdef: - int err + int err = 0 int reuseport_flag = 1 err = system.setsockopt( @@ -1397,7 +1397,7 @@ cdef class Loop: self._debug = bool(enabled) if self.is_running(): self.call_soon_threadsafe( - self._set_coroutine_debug, self, self._debug) + self._set_coroutine_debug, self._debug) def is_running(self): """Return whether the event loop is currently running.""" @@ -2750,7 +2750,7 @@ cdef class Loop: executable=None, pass_fds=(), # For tests only! Do not use in your code. Ever. - __uvloop_sleep_after_fork=False): + uvloop_sleep_after_fork=False): # TODO: Implement close_fds (might not be very important in # Python 3.5, since all FDs aren't inheritable by default.) @@ -2770,7 +2770,7 @@ cdef class Loop: if executable is not None: args[0] = executable - if __uvloop_sleep_after_fork: + if uvloop_sleep_after_fork: debug_flags |= __PROCESS_DEBUG_SLEEP_AFTER_FORK waiter = self._new_future() diff --git a/uvloop/sslproto.pxd b/uvloop/sslproto.pxd index 3da10f00..68e4d572 100644 --- a/uvloop/sslproto.pxd +++ b/uvloop/sslproto.pxd @@ -122,7 +122,7 @@ cdef class SSLProtocol: # Flow control for writes from APP socket cdef _control_app_writing(self, object context=*) - cdef size_t _get_write_buffer_size(self) + cdef size_t _get_write_buffer_size(self) noexcept cdef _set_write_buffer_limits(self, high=*, low=*) # Flow control for reads to APP socket @@ -134,5 +134,5 @@ cdef class SSLProtocol: cdef _control_ssl_reading(self) cdef _set_read_buffer_limits(self, high=*, low=*) - cdef size_t _get_read_buffer_size(self) + cdef size_t _get_read_buffer_size(self) noexcept cdef _fatal_error(self, exc, message=*) diff --git a/uvloop/sslproto.pyx b/uvloop/sslproto.pyx index 42bb7644..0a437463 100644 --- a/uvloop/sslproto.pyx +++ b/uvloop/sslproto.pyx @@ -861,7 +861,7 @@ cdef class SSLProtocol: 'protocol': self, }) - cdef size_t _get_write_buffer_size(self): + cdef size_t _get_write_buffer_size(self) noexcept: return self._outgoing.pending + self._write_buffer_size cdef _set_write_buffer_limits(self, high=None, low=None): @@ -903,7 +903,7 @@ cdef class SSLProtocol: self._incoming_high_water = high self._incoming_low_water = low - cdef size_t _get_read_buffer_size(self): + cdef size_t _get_read_buffer_size(self) noexcept: return self._incoming.pending # Flow control for writes to SSL socket From 55bab4f7486d9b58ecc4f81120f8f8eaf1099cdd Mon Sep 17 00:00:00 2001 From: Alan Brooks <12380017+alan-brooks@users.noreply.github.com> Date: Thu, 28 Dec 2023 16:17:49 +0000 Subject: [PATCH 02/15] _set_coroutine_debug has args difference in python 3.11 --- uvloop/loop.pyx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 53e11600..5ca718e4 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -1396,8 +1396,9 @@ cdef class Loop: def set_debug(self, enabled): self._debug = bool(enabled) if self.is_running(): + args = (self, self._debug) if sys.version_info < (3, 11) else (self._debug,) self.call_soon_threadsafe( - self._set_coroutine_debug, self._debug) + self._set_coroutine_debug, *args) def is_running(self): """Return whether the event loop is currently running.""" From 95a147f79e1d3685b8f91ddae8a382f4668af27a Mon Sep 17 00:00:00 2001 From: alan-brooks <12380017+alan-brooks@users.noreply.github.com> Date: Thu, 28 Dec 2023 19:58:11 +0000 Subject: [PATCH 03/15] fix tests on python 3.8 --- uvloop/loop.pyx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 5ca718e4..75b915a9 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -1396,9 +1396,8 @@ cdef class Loop: def set_debug(self, enabled): self._debug = bool(enabled) if self.is_running(): - args = (self, self._debug) if sys.version_info < (3, 11) else (self._debug,) - self.call_soon_threadsafe( - self._set_coroutine_debug, *args) + args = ((self, self._debug),) if sys.version_info < (3, 11) else (self._debug,) + self.call_soon_threadsafe(self._set_coroutine_debug, *args) def is_running(self): """Return whether the event loop is currently running.""" From ca06a743c4472c3629610664760d4538283aebf9 Mon Sep 17 00:00:00 2001 From: alan-brooks <12380017+alan-brooks@users.noreply.github.com> Date: Fri, 29 Dec 2023 11:24:19 +0000 Subject: [PATCH 04/15] fix arg count for wrap() --- uvloop/loop.pxd | 2 +- uvloop/loop.pyx | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/uvloop/loop.pxd b/uvloop/loop.pxd index f90c7041..d34ffeb8 100644 --- a/uvloop/loop.pxd +++ b/uvloop/loop.pxd @@ -220,7 +220,7 @@ cdef class Loop: cdef inline _ceval_process_signals(self) cdef _invoke_signals(self, bytes data) - cdef _set_coroutine_debug(self, bint enabled) + cpdef _set_coroutine_debug(self, bint enabled) cdef _print_debug_info(self) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 75b915a9..a3eeb605 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -1131,7 +1131,7 @@ cdef class Loop: if err < 0: raise convert_error(-errno.errno) - cdef _set_coroutine_debug(self, bint enabled): + cpdef _set_coroutine_debug(self, bint enabled): enabled = bool(enabled) if self._coroutine_debug_set == enabled: return @@ -1396,8 +1396,7 @@ cdef class Loop: def set_debug(self, enabled): self._debug = bool(enabled) if self.is_running(): - args = ((self, self._debug),) if sys.version_info < (3, 11) else (self._debug,) - self.call_soon_threadsafe(self._set_coroutine_debug, *args) + self.call_soon_threadsafe(self._set_coroutine_debug, self._debug) def is_running(self): """Return whether the event loop is currently running.""" From a73522b6e4aa04f0fbc83a28de8039d29ac16343 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Sun, 25 Aug 2024 23:51:44 -0400 Subject: [PATCH 05/15] Use Cython 3.0 and fix deprecated test --- pyproject.toml | 10 ++++++---- setup.py | 2 +- tests/test_tcp.py | 6 ++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c4f93f0b..85c59bf5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,14 +36,16 @@ test = [ # pycodestyle is a dependency of flake8, but it must be frozen because # their combination breaks too often # (example breakage: https://gitlab.com/pycqa/flake8/issues/427) - 'aiohttp>=3.8.1; python_version < "3.12"', - 'aiohttp==3.9.0b0; python_version >= "3.12"', + 'aiohttp>=3.10.5', 'flake8~=5.0', 'psutil', 'pycodestyle~=2.9.0', 'pyOpenSSL~=23.0.0', 'mypy>=0.800', - 'Cython(>=0.29.36,<0.30.0)', +] +dev = [ + 'setuptools>=60', + 'Cython~=3.0', ] docs = [ 'Sphinx~=4.1.2', @@ -55,7 +57,7 @@ docs = [ requires = [ "setuptools>=60", "wheel", - "Cython(>=0.29.36,<0.30.0)", + "Cython~=3.0", ] build-backend = "setuptools.build_meta" diff --git a/setup.py b/setup.py index e6aa5201..5ac869d5 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ from setuptools.command.sdist import sdist -CYTHON_DEPENDENCY = 'Cython(>=0.29.36)' +CYTHON_DEPENDENCY = 'Cython>=3.0' MACHINE = platform.machine() MODULES_CFLAGS = [os.getenv('UVLOOP_OPT_CFLAGS', '-O2')] _ROOT = pathlib.Path(__file__).parent diff --git a/tests/test_tcp.py b/tests/test_tcp.py index f269406e..8759383d 100644 --- a/tests/test_tcp.py +++ b/tests/test_tcp.py @@ -2239,8 +2239,7 @@ def test_renegotiation(self): sslctx.use_privatekey_file(self.ONLYKEY) sslctx.use_certificate_chain_file(self.ONLYCERT) client_sslctx = self._create_client_ssl_context() - if sys.version_info < (3, 8) and hasattr(ssl, 'OP_NO_TLSv1_3'): - client_sslctx.options |= ssl.OP_NO_TLSv1_3 + client_sslctx.maximum_version = ssl.TLSVersion.TLSv1_2 def server(sock): conn = openssl_ssl.Connection(sslctx, sock) @@ -2598,8 +2597,7 @@ def test_flush_before_shutdown(self): sslctx_openssl.use_privatekey_file(self.ONLYKEY) sslctx_openssl.use_certificate_chain_file(self.ONLYCERT) client_sslctx = self._create_client_ssl_context() - if sys.version_info < (3, 8) and hasattr(ssl, 'OP_NO_TLSv1_3'): - client_sslctx.options |= ssl.OP_NO_TLSv1_3 + client_sslctx.maximum_version = ssl.TLSVersion.TLSv1_2 future = None From 932f5464d5f4d2c492e9a5e3b8512dee04ff8b9d Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 16:34:01 -0400 Subject: [PATCH 06/15] Fix the dunder param issue differently --- tests/test_process.py | 4 ++-- uvloop/loop.pyx | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/test_process.py b/tests/test_process.py index 95e1c9e7..bfcbba17 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -912,7 +912,7 @@ def test_process_delayed_stdio__paused__stdin_pipe(self): stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - uvloop_sleep_after_fork=True)) + __uvloop_sleep_after_fork=True)) self.assertIsNot(transport, None) self.assertEqual(transport.get_returncode(), 0) self.assertEqual( @@ -931,7 +931,7 @@ def test_process_delayed_stdio__paused__no_stdin(self): stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - uvloop_sleep_after_fork=True)) + __uvloop_sleep_after_fork=True)) self.assertIsNot(transport, None) self.assertEqual(transport.get_returncode(), 0) self.assertEqual( diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 00a635ff..2af3d464 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -2748,8 +2748,7 @@ cdef class Loop: start_new_session=False, executable=None, pass_fds=(), - # For tests only! Do not use in your code. Ever. - uvloop_sleep_after_fork=False): + **kwargs): # TODO: Implement close_fds (might not be very important in # Python 3.5, since all FDs aren't inheritable by default.) @@ -2769,8 +2768,12 @@ cdef class Loop: if executable is not None: args[0] = executable - if uvloop_sleep_after_fork: + # For tests only! Do not use in your code. Ever. + if kwargs.pop("__uvloop_sleep_after_fork", False): debug_flags |= __PROCESS_DEBUG_SLEEP_AFTER_FORK + if kwargs: + raise ValueError( + 'unexpected kwargs: {}'.format(', '.join(kwargs.keys()))) waiter = self._new_future() protocol = protocol_factory() From f63df46288a171268899082949bc8dab940a54d4 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 16:40:59 -0400 Subject: [PATCH 07/15] Revert tmp debugging --- uvloop/cbhandles.pyx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uvloop/cbhandles.pyx b/uvloop/cbhandles.pyx index 8bcc5aa6..2914b42e 100644 --- a/uvloop/cbhandles.pyx +++ b/uvloop/cbhandles.pyx @@ -76,8 +76,8 @@ cdef class Handle: self.arg1, self.arg2, self.arg3, self.arg4) else: - raise RuntimeError('invalid Handle.cb_type: {} {!r}/{!r}'.format( - cb_type, self.args1, self.args2)) + raise RuntimeError('invalid Handle.cb_type: {}'.format( + cb_type)) except (KeyboardInterrupt, SystemExit): raise From c48173df07ab02a760444f0c53a0b3d84a28347f Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 18:52:01 -0400 Subject: [PATCH 08/15] Restore consts.pxi without DEF --- uvloop/includes/consts.pxi | 33 +++++++++++++++++++++++++++++++++ uvloop/loop.pxd | 28 ++++------------------------ 2 files changed, 37 insertions(+), 24 deletions(-) create mode 100644 uvloop/includes/consts.pxi diff --git a/uvloop/includes/consts.pxi b/uvloop/includes/consts.pxi new file mode 100644 index 00000000..82f3c327 --- /dev/null +++ b/uvloop/includes/consts.pxi @@ -0,0 +1,33 @@ +cdef enum: + UV_STREAM_RECV_BUF_SIZE = 256000 # 250kb + + FLOW_CONTROL_HIGH_WATER = 64 # KiB + FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB + FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB + + DEFAULT_FREELIST_SIZE = 250 + DNS_PYADDR_TO_SOCKADDR_CACHE_SIZE = 2048 + + DEBUG_STACK_DEPTH = 10 + + + __PROCESS_DEBUG_SLEEP_AFTER_FORK = 1 + + + LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5 + SSL_READ_MAX_SIZE = 256 * 1024 + + +cdef extern from *: + ''' + // Number of seconds to wait for SSL handshake to complete + // The default timeout matches that of Nginx. + #define SSL_HANDSHAKE_TIMEOUT 60.0 + + // Number of seconds to wait for SSL shutdown to complete + // The default timeout mimics lingering_time + #define SSL_SHUTDOWN_TIMEOUT 30.0 + ''' + + const float SSL_HANDSHAKE_TIMEOUT + const float SSL_SHUTDOWN_TIMEOUT diff --git a/uvloop/loop.pxd b/uvloop/loop.pxd index d34ffeb8..207748aa 100644 --- a/uvloop/loop.pxd +++ b/uvloop/loop.pxd @@ -1,35 +1,15 @@ # cython: language_level=3 -cdef extern from *: - ''' - enum { UV_STREAM_RECV_BUF_SIZE = 256000, - SSL_READ_MAX_SIZE = 256 * 1024, // 250kb - }; - const float SSL_HANDSHAKE_TIMEOUT = 60.0; // Number of seconds to wait for SSL handshake to complete The default timeout matches that of Nginx. - const float SSL_SHUTDOWN_TIMEOUT = 30.0; // Number of seconds to wait for SSL shutdown to complete The default timeout mimics lingering_time - ''' - const bint UV_STREAM_RECV_BUF_SIZE - const bint SSL_READ_MAX_SIZE - - const float SSL_HANDSHAKE_TIMEOUT - const float SSL_SHUTDOWN_TIMEOUT - -cdef enum: - FLOW_CONTROL_HIGH_WATER = 64 # KiB - FLOW_CONTROL_HIGH_WATER_SSL_READ = 256 # KiB - FLOW_CONTROL_HIGH_WATER_SSL_WRITE = 512 # KiB - - DNS_PYADDR_TO_SOCKADDR_CACHE_SIZE = 2048 - DEBUG_STACK_DEPTH = 10 - __PROCESS_DEBUG_SLEEP_AFTER_FORK = 1 - LOG_THRESHOLD_FOR_CONNLOST_WRITES = 5 - from .includes cimport uv from .includes cimport system from libc.stdint cimport uint64_t, uint32_t, int64_t + +include "includes/consts.pxi" + + cdef extern from *: ctypedef int vint "volatile int" From 7562c1ec85a87a9b3113c6617b46a04fbe4710f9 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 19:32:06 -0400 Subject: [PATCH 09/15] Dorp unused env and only emit linenums in debug --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 5ac869d5..0401402f 100644 --- a/setup.py +++ b/setup.py @@ -145,8 +145,8 @@ def finalize_options(self): self.distribution.ext_modules, compiler_directives=directives, annotate=self.cython_annotate, - compile_time_env=dict(DEFAULT_FREELIST_SIZE=250, SSL_READ_MAX_SIZE=256 * 1024), - emit_linenums=True) + compile_time_env=dict(DEFAULT_FREELIST_SIZE=250), + emit_linenums=self.debug) super().finalize_options() From fb95d4ec5e1b08ca61805358430ef39511f5e638 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 19:36:58 -0400 Subject: [PATCH 10/15] Partially revert the WIN32 changes Feel free to open a new PR to add them back --- uvloop/includes/system.h | 16 ---------------- uvloop/includes/system.pxd | 12 ++++++++---- 2 files changed, 8 insertions(+), 20 deletions(-) delete mode 100755 uvloop/includes/system.h diff --git a/uvloop/includes/system.h b/uvloop/includes/system.h deleted file mode 100755 index e143bb5c..00000000 --- a/uvloop/includes/system.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef UVLOOP_SYSTEM_H_ -#define UVLOOP_SYSTEM_H_ -#if defined(_WIN32) || defined(MS_WINDOWS) || defined(_MSC_VER) -#include "Winsock2.h" -#include "ws2def.h" -#include "includes/fork_handler.h" -#else -#include "arpa/inet.h" -#include "sys/socket.h" -#include "sys/un.h" -#include "unistd.h" -#include "pthread.h" -#endif -#endif - - diff --git a/uvloop/includes/system.pxd b/uvloop/includes/system.pxd index d1da74ed..367fedd1 100644 --- a/uvloop/includes/system.pxd +++ b/uvloop/includes/system.pxd @@ -1,9 +1,13 @@ from libc.stdint cimport int8_t, uint64_t -cdef extern from "includes/system.h": - int ntohl(int) nogil - int htonl(int) nogil - int ntohs(int) nogil +cdef extern from "arpa/inet.h" nogil: + + int ntohl(int) + int htonl(int) + int ntohs(int) + + +cdef extern from "sys/socket.h" nogil: struct sockaddr: unsigned short sa_family From 5b03fdddce6a3175d765bed6a909117faf46718e Mon Sep 17 00:00:00 2001 From: Fantix King Date: Tue, 27 Aug 2024 19:46:22 -0400 Subject: [PATCH 11/15] Revert noexcept on _get_write_buffer_size() --- setup.py | 2 +- uvloop/handles/basetransport.pxd | 2 +- uvloop/handles/basetransport.pyx | 2 +- uvloop/handles/stream.pyx | 2 +- uvloop/handles/udp.pyx | 2 +- uvloop/sslproto.pxd | 2 +- uvloop/sslproto.pyx | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/setup.py b/setup.py index 0401402f..22a61e0c 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ from setuptools.command.sdist import sdist -CYTHON_DEPENDENCY = 'Cython>=3.0' +CYTHON_DEPENDENCY = 'Cython~=3.0' MACHINE = platform.machine() MODULES_CFLAGS = [os.getenv('UVLOOP_OPT_CFLAGS', '-O2')] _ROOT = pathlib.Path(__file__).parent diff --git a/uvloop/handles/basetransport.pxd b/uvloop/handles/basetransport.pxd index 8112622c..9923b76a 100644 --- a/uvloop/handles/basetransport.pxd +++ b/uvloop/handles/basetransport.pxd @@ -47,7 +47,7 @@ cdef class UVBaseTransport(UVSocketHandle): # === overloads === cdef _new_socket(self) - cdef size_t _get_write_buffer_size(self) noexcept + cdef size_t _get_write_buffer_size(self) cdef bint _is_reading(self) noexcept cdef _start_reading(self) diff --git a/uvloop/handles/basetransport.pyx b/uvloop/handles/basetransport.pyx index a8592f2d..d8a78971 100644 --- a/uvloop/handles/basetransport.pyx +++ b/uvloop/handles/basetransport.pyx @@ -18,7 +18,7 @@ cdef class UVBaseTransport(UVSocketHandle): self._closing = 0 - cdef size_t _get_write_buffer_size(self) noexcept: + cdef size_t _get_write_buffer_size(self): return 0 cdef inline _schedule_call_connection_made(self): diff --git a/uvloop/handles/stream.pyx b/uvloop/handles/stream.pyx index 09df8878..5cb3f074 100644 --- a/uvloop/handles/stream.pyx +++ b/uvloop/handles/stream.pyx @@ -582,7 +582,7 @@ cdef class UVStream(UVBaseTransport): self._maybe_resume_protocol() - cdef size_t _get_write_buffer_size(self) noexcept: + cdef size_t _get_write_buffer_size(self): if self._handle is NULL: return 0 return ((self._handle).write_queue_size + diff --git a/uvloop/handles/udp.pyx b/uvloop/handles/udp.pyx index fdd1d8b2..d2c4e711 100644 --- a/uvloop/handles/udp.pyx +++ b/uvloop/handles/udp.pyx @@ -127,7 +127,7 @@ cdef class UDPTransport(UVBaseTransport): exc = convert_error(err) raise exc - cdef size_t _get_write_buffer_size(self) noexcept: + cdef size_t _get_write_buffer_size(self): if self._handle is NULL: return 0 return (self._handle).send_queue_size diff --git a/uvloop/sslproto.pxd b/uvloop/sslproto.pxd index 68e4d572..1b7489d5 100644 --- a/uvloop/sslproto.pxd +++ b/uvloop/sslproto.pxd @@ -122,7 +122,7 @@ cdef class SSLProtocol: # Flow control for writes from APP socket cdef _control_app_writing(self, object context=*) - cdef size_t _get_write_buffer_size(self) noexcept + cdef size_t _get_write_buffer_size(self) cdef _set_write_buffer_limits(self, high=*, low=*) # Flow control for reads to APP socket diff --git a/uvloop/sslproto.pyx b/uvloop/sslproto.pyx index 0a437463..0217aab0 100644 --- a/uvloop/sslproto.pyx +++ b/uvloop/sslproto.pyx @@ -861,7 +861,7 @@ cdef class SSLProtocol: 'protocol': self, }) - cdef size_t _get_write_buffer_size(self) noexcept: + cdef size_t _get_write_buffer_size(self): return self._outgoing.pending + self._write_buffer_size cdef _set_write_buffer_limits(self, high=None, low=None): From 8793035c9c527809a6668b7eaa2dce6299e8ba45 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 28 Aug 2024 12:03:50 -0400 Subject: [PATCH 12/15] Revert noexcept on _is_reading() --- uvloop/handles/basetransport.pxd | 2 +- uvloop/handles/basetransport.pyx | 2 +- uvloop/handles/stream.pyx | 2 +- uvloop/handles/udp.pyx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/uvloop/handles/basetransport.pxd b/uvloop/handles/basetransport.pxd index 9923b76a..ba356a78 100644 --- a/uvloop/handles/basetransport.pxd +++ b/uvloop/handles/basetransport.pxd @@ -49,6 +49,6 @@ cdef class UVBaseTransport(UVSocketHandle): cdef _new_socket(self) cdef size_t _get_write_buffer_size(self) - cdef bint _is_reading(self) noexcept + cdef bint _is_reading(self) cdef _start_reading(self) cdef _stop_reading(self) diff --git a/uvloop/handles/basetransport.pyx b/uvloop/handles/basetransport.pyx index d8a78971..28b30794 100644 --- a/uvloop/handles/basetransport.pyx +++ b/uvloop/handles/basetransport.pyx @@ -211,7 +211,7 @@ cdef class UVBaseTransport(UVSocketHandle): self._extra_info = {} self._extra_info[name] = obj - cdef bint _is_reading(self) noexcept: + cdef bint _is_reading(self): raise NotImplementedError cdef _start_reading(self): diff --git a/uvloop/handles/stream.pyx b/uvloop/handles/stream.pyx index 5cb3f074..870adeaa 100644 --- a/uvloop/handles/stream.pyx +++ b/uvloop/handles/stream.pyx @@ -283,7 +283,7 @@ cdef class UVStream(UVBaseTransport): cdef inline _close_on_read_error(self): self.__read_error_close = 1 - cdef bint _is_reading(self) noexcept: + cdef bint _is_reading(self): return self.__reading cdef _start_reading(self): diff --git a/uvloop/handles/udp.pyx b/uvloop/handles/udp.pyx index d2c4e711..bbe60d56 100644 --- a/uvloop/handles/udp.pyx +++ b/uvloop/handles/udp.pyx @@ -132,7 +132,7 @@ cdef class UDPTransport(UVBaseTransport): return 0 return (self._handle).send_queue_size - cdef bint _is_reading(self) noexcept: + cdef bint _is_reading(self): return self.__receiving cdef _start_reading(self): From d387089d478a998d5da3f0eb6b612043f1bfcd4c Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 28 Aug 2024 12:08:18 -0400 Subject: [PATCH 13/15] Revert noexcept because _fatal_error() may raise * __uv_stream_on_read_common() * __uv_stream_on_read_impl() * __uv_stream_on_write_impl() --- uvloop/handles/stream.pyx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uvloop/handles/stream.pyx b/uvloop/handles/stream.pyx index 870adeaa..9fbc5a51 100644 --- a/uvloop/handles/stream.pyx +++ b/uvloop/handles/stream.pyx @@ -759,7 +759,7 @@ cdef inline bint __uv_stream_on_read_common( UVStream sc, Loop loop, ssize_t nread, -) noexcept: +): if sc._closed: # The stream was closed, there is no reason to # do any work now. @@ -822,7 +822,7 @@ cdef inline void __uv_stream_on_read_impl( uv.uv_stream_t* stream, ssize_t nread, const uv.uv_buf_t* buf, -) noexcept: +): cdef: UVStream sc = stream.data Loop loop = sc._loop @@ -853,7 +853,7 @@ cdef inline void __uv_stream_on_read_impl( cdef inline void __uv_stream_on_write_impl( uv.uv_write_t* req, int status, -) noexcept: +): cdef: _StreamWriteContext ctx = <_StreamWriteContext> req.data UVStream stream = ctx.stream From 2e57927d3ef3c687ae7722b07c911ec9f3c53986 Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 28 Aug 2024 12:25:09 -0400 Subject: [PATCH 14/15] Revert some more noexcept --- uvloop/dns.pyx | 2 +- uvloop/loop.pyx | 1 - uvloop/sslproto.pxd | 2 +- uvloop/sslproto.pyx | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/uvloop/dns.pyx b/uvloop/dns.pyx index 3ba81fa0..67aeb595 100644 --- a/uvloop/dns.pyx +++ b/uvloop/dns.pyx @@ -326,7 +326,7 @@ cdef class AddrInfo: return result @staticmethod - cdef int isinstance(object other) noexcept: + cdef int isinstance(object other): return type(other) is AddrInfo diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index 2af3d464..e49332ba 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -43,7 +43,6 @@ from cpython.pycapsule cimport PyCapsule_New, PyCapsule_GetPointer from . import _noop - include "includes/stdlib.pxi" include "errors.pyx" diff --git a/uvloop/sslproto.pxd b/uvloop/sslproto.pxd index 1b7489d5..3da10f00 100644 --- a/uvloop/sslproto.pxd +++ b/uvloop/sslproto.pxd @@ -134,5 +134,5 @@ cdef class SSLProtocol: cdef _control_ssl_reading(self) cdef _set_read_buffer_limits(self, high=*, low=*) - cdef size_t _get_read_buffer_size(self) noexcept + cdef size_t _get_read_buffer_size(self) cdef _fatal_error(self, exc, message=*) diff --git a/uvloop/sslproto.pyx b/uvloop/sslproto.pyx index 0217aab0..42bb7644 100644 --- a/uvloop/sslproto.pyx +++ b/uvloop/sslproto.pyx @@ -903,7 +903,7 @@ cdef class SSLProtocol: self._incoming_high_water = high self._incoming_low_water = low - cdef size_t _get_read_buffer_size(self) noexcept: + cdef size_t _get_read_buffer_size(self): return self._incoming.pending # Flow control for writes to SSL socket From b2f6897ab5747c1cf442f7ffcd6ae9e74173a8ff Mon Sep 17 00:00:00 2001 From: Fantix King Date: Wed, 28 Aug 2024 12:35:15 -0400 Subject: [PATCH 15/15] _set_coroutine_debug() doesn't need to be cpdef? --- uvloop/loop.pxd | 2 +- uvloop/loop.pyx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uvloop/loop.pxd b/uvloop/loop.pxd index 207748aa..56134733 100644 --- a/uvloop/loop.pxd +++ b/uvloop/loop.pxd @@ -200,7 +200,7 @@ cdef class Loop: cdef inline _ceval_process_signals(self) cdef _invoke_signals(self, bytes data) - cpdef _set_coroutine_debug(self, bint enabled) + cdef _set_coroutine_debug(self, bint enabled) cdef _print_debug_info(self) diff --git a/uvloop/loop.pyx b/uvloop/loop.pyx index e49332ba..24df3e8a 100644 --- a/uvloop/loop.pyx +++ b/uvloop/loop.pyx @@ -1130,7 +1130,7 @@ cdef class Loop: if err < 0: raise convert_error(-errno.errno) - cpdef _set_coroutine_debug(self, bint enabled): + cdef _set_coroutine_debug(self, bint enabled): enabled = bool(enabled) if self._coroutine_debug_set == enabled: return