Skip to content

Releases: MagicStack/uvloop

v0.11.3

31 Oct 05:37
Compare
Choose a tag to compare

Bug Fixes

  • Use new PyOS_BeforeFork and PyOS_AfterFork_* 3.7 APIs when available
    (by @1st1 in 75e7c32)

  • Fix async generators finalization to function correctly in debug mode
    (by @1st1 in dcbb1f4 for #200)

  • Pass backlog to loop.create_unix_server() when a server is created via
    loop.create_server(sock=unix_sock, backlog=backlog).
    (by @hikoz in 40ad257)

  • Don't raise "requires a DNS lookup" error on Unix Domain Socket (#204)
    (by @pax0r in 9fc3ca2 for #204)

  • Fix use of PyContext* APIs in 3.7.1
    (by @1st1 in 7474800)

Build

v0.11.2

07 Aug 21:00
Compare
Choose a tag to compare

Bug Fixes

v0.10.3

07 Aug 18:53
Compare
Choose a tag to compare

Note: this is a bugfix release for 0.10.x branch. It's recommended to upgrade to 0.11.x.

Bug Fixes

  • Fix a memory leak in contextvars support.
    (#192 for more details)

v0.11.1

02 Aug 15:30
Compare
Choose a tag to compare

Bug Fixes

v0.11.0

05 Jul 00:52
Compare
Choose a tag to compare

New Features

Bug Fixes

Build

  • setup.py: Detect if the libuv submodule has not been checked out.
    (by @1st1 in a190cdd)

  • Fix race between futures cancellation and loop.remove_reader() /
    loop.remove_writer().
    (by @andr-04 and @1st1 in cb0a65a for #169)

  • Enable 3.7 CI on Travis and build wheels for 3.7.
    (by @1st1 in 37f964b for #179)

v0.10.2

25 Jun 18:03
Compare
Choose a tag to compare

Bug Fixes

  • Use a proper type for the thread indent (fixes 32-bit build for 3.7.)
    (by @1st1 in 700582a for #172)

  • Fix cancellation race in loop.sock_recv() and loop.sock_recv_into()
    methods. (by @andr-04 and @1st1 in 298851b for #169)

  • Sync SSL error messages with CPython's SSL implementation.
    (by @1st1 in c3aeff2)

  • Fix SSLTransport.abort() to mark the transport as closed.
    (by @1st1 in ba25d8b)

  • Detect if libuv submodule has not been checked out in setup.py.
    (by @1st1 in dd8060d)

v0.10.1

01 Jun 23:12
Compare
Choose a tag to compare

Bug Fixes

  • Bump Cython from 0.28.2 to 0.28.3.
    (by @1st1 in 5044d24)

  • Increase default SSL handshake timeout to 60 seconds.
    (by @1st1 in 70c332c, fixes #161)

  • Add ssl_handshake_timeout parameter to loop.create_connection(),
    loop.create_server(), loop.create_unix_connection(),
    loop.create_unix_server(), loop.connect_accepted_socket().
    (by @1st1 in 68dd733, addresses #161)

  • Consistently close transports if create_server/create_connection/etc
    timeout or cancelled.
    (by @1st1 in ac90d8b and 77ee4f9)

v0.10.0

30 May 20:54
Compare
Choose a tag to compare

New Features

Bug Fixes

v0.9.1

29 Nov 03:18
Compare
Choose a tag to compare
  • Stop using malloc for uv_request* handlers.

  • Fix loop.add_reader(), loop.add_writer(), loop.remove_reader(),
    and loop.remove_writer() to better track socket objects.

  • Fix loop.sock_recv(), loop.sock_sendall(), loop.sock_recv_into(),
    and loop.sock_connect() to correctly handle Task.cancel().

  • Better handle immediate cancellation of loop.create_connection().

  • Make unit tests stricter: ensure loop.call_exception_handler()
    does not get called, unless it's expected.

v0.9.0

27 Nov 00:02
Compare
Choose a tag to compare

TCP & UDP Transports

  • transport.get_extra_info('socket') now returns a socket-like
    object. It supports socket methods like setsockopts(), but
    prohibits send(), recv(), close() and any other calls that
    can interfere with the transport that ultimately owns this file
    descriptor.

  • TCP_NODELAY is used by default for all TCP connections.

  • Make Transport.resume_reading() and pause_reading() idempotent.
    This will match asyncio in Python 3.7. Issue #93.

  • loop.create_server() keeps a strong reference to the Server
    object it returns until its closed. Fixes #81.

  • Fix loop.connect_accepted_socket() to return correct SSL
    transport.

  • The UDP transport layer was rewritten from scratch. Now it uses
    uv_poll_* libuv APIs, instead of high-level uv_udp_* ones.
    This could mean a slight performance regression, and will be
    reverted when we port uvloop to Windows. For now this is
    the only viable option to make uvloop fully compatible with asyncio.
    When libuv gets an API to connect UDP sockets, uv_udp_connect(),
    we'll be able to switch to a better UDP implementation. Issue #109.

  • UDPTransport.sendto(data, addr) will raise an exception if
    addr requires a name resolution. Issue #91.

Low-level sockets

  • loop.add_reader() and loop.add_writer() accept file-like
    objects. Issue #97.

  • loop.sock_connect() supports 4 element address tuples for
    IPv6 sockets. Issue #99.

  • Protect sockets from closing while they are in use by
    loop.sock_*() methods. Close all reader/writer sockets the
    loop owns when it closes. Issue #100.

Other event loop APIs

  • loop.run_until_complete() cleans up done callbacks in all
    situations. By @jimmylai.
    See also Python issue: https://bugs.python.org/issue30423.

  • New uv_loop_fork() libuv API is used in loop.subprocess_shell()
    and loop.subprocess_exec() making them more stable. Issue #39.

  • loop.call_later() accepts infinite time float('inf').
    Issue #102.

  • loop.subprocess_exec() accepts pathlib.Path objects for its
    cwd parameter. Issue #90.

  • Support pathlib.Path objects in loop.create_unix_connection()
    and loop.create_unix_server().

  • Try removing existing stale Unix socket paths in
    loop.create_unix_server().

  • ascii encoding is tried before encoding with idna.
    Issue #95.

  • Fix slow_callback_duration repr in warnings for callback handles
    and Tasks. Issue #103.

Python 3.7

Some APIs that will be available in Python 3.7 in vanilla asyncio,
but can be used with uvloop today.

  • Implement .cancelled() method for callback and timer handles.

  • Add Transport.is_reading().

  • Implement loop.sock_recv_into().

  • Python 3.7.0a1 is now supported. Issue #110.

Miscellaneous

  • Drop custom uvloop Future and Task implementations. This means
    that there will be a tiny performance regression for Python 3.5
    deploys.

  • Limit stack traces in debug mode to make it faster.

  • signal.siginterrupt is now used by signals machinery to let
    system calls to be repeated by default, instead of raising an
    EINTR.

Build

  • libuv in uvloop has been upgraded from v1.11.0 to v1.17.0. Aside
    from bug fixes and performance improvements, libuv survives
    fork.

  • LIBUV_CONFIGURE_HOST environment variable can be used to
    cross-compile uvloop/libuv. By @cmcqueen, for issue #104.

  • Cyhton was upgraded from 0.25.2 to 0.27.3.

  • uvloop binary is linked with pthread. By @frederikaalund,
    for issue #87.