Skip to content

Releases: socketry/io-event

v1.16.0

12 May 06:28
d59a55a

Choose a tag to compare

  • Use eventfd for URing cross-thread wakeup, and enable IORING_SETUP_SINGLE_ISSUER, IORING_SETUP_DEFER_TASKRUN, and IORING_SETUP_TASKRUN_FLAG. The waking thread now signals via eventfd rather than submitting a NOP SQE, which unlocks the single-issuer optimisation, defers task work to the application thread, and lets select() skip the io_uring_get_events() syscall when no task work is pending.
  • Add support for the io_close fiber-scheduler hook (Ruby 4.0+). The URing selector performs the close asynchronously via the ring; the Debug::Selector and TestScheduler wrappers forward to the underlying selector when supported.
  • Improve WorkerPool GC compaction support and add proper write barriers, fixing potential use-after-free under compacting GC.
  • Keep blocked scheduler fibers alive during GC by registering them as roots in TestScheduler#block, preventing premature collection and the resulting use-after-free crash on resume.
  • Use Ruby's xmalloc / xcalloc / xrealloc2 / xfree for all internal selector allocations (the per-fiber ready-queue entries in IO_Event_Selector_ready_push, and both the backing array and per-element allocations in IO_Event_Array). Previously a raw malloc paired with a debug-build-only assert(...) would silently dereference NULL and crash in release builds under memory pressure; the Ruby allocators trigger a GC sweep on pressure and raise NoMemoryError / RangeError on real failure, so the -1 return-code paths through IO_Event_Array_initialize / _resize / _lookup and their callers in epoll.c / kqueue.c / uring.c are removed in favour of straight exception propagation.
  • Correctly handle short io_uring_submit() results in the URing selector. io_uring_submit() returns the number of SQEs actually accepted by the kernel and can be short (SQE prep errors, ENOMEM, transient EAGAIN); the old accounting reset pending = 0 on any success and silently lost track of unsubmitted SQEs.
  • Enable IORING_SETUP_SUBMIT_ALL (kernel 5.18+) on the URing selector so the kernel keeps processing the rest of an SQE batch past individual errors, reducing the frequency of short submits in practice.

v1.15.1

05 Apr 11:15
ccd0953

Choose a tag to compare

Bump patch version.

v1.15.0

05 Apr 05:17
5c20637

Choose a tag to compare

  • Add bounds checks, in the unlikely event of a user providing an invalid offset that exceeds the buffer size. This prevents potential memory corruption and ensures safe operation when using buffered IO methods.

v1.14.5

24 Mar 02:47
6b84f63

Choose a tag to compare

Bump patch version.

v1.14.4

10 Mar 03:57
251bec0

Choose a tag to compare

  • Allow epoll_pwait2 to be disabled via --disable-epoll_pwait2.

v1.7.1

04 Oct 22:13
50f15b4

Choose a tag to compare

What's Changed

Full Changelog: v1.7.0...v1.7.1

v1.6.5

23 Jun 02:30
3abd3a8

Choose a tag to compare

What's Changed

Full Changelog: v1.6.4...v1.6.5

v1.4.3

05 Feb 01:47
5fbad06

Choose a tag to compare

What's Changed

Full Changelog: v1.4.2...v1.4.3

v1.4.0

28 Dec 00:48
9cd1013

Choose a tag to compare

What's Changed

  • Ruby 3.3 updates (dropped support for Ruby 3.0) by @ioquatix in #85

Full Changelog: v1.3.3...v1.4.0

v1.3.3

28 Dec 00:48
977f76a

Choose a tag to compare

What's Changed

  • Correctly pass through flags rb_process_status_wait. by @ioquatix in #81
  • Ensure that the saved node is freed correctly if an exception occurs. by @ioquatix in #84

Full Changelog: v1.3.2...v1.3.3