Skip to content

windows-ioring-sys: v0.2.0

Latest

Choose a tag to compare

@MikeGrier MikeGrier released this 30 Aug 06:02
1e23053

0.2.0 (2026-08-30)

⚠ BREAKING CHANGES

  • ioring: RegisteredBuffers::get now takes &mut self. Callers holding the registration behind a shared reference, or holding the returned slice across a submission, must adjust. Appropriate for the 0.2.0 release.
  • ioring: EventDelivery::ring() -> &Mutex is removed in favour of EventDelivery::scope() -> RingScope. Callers that locked the mutex and built a Batch now call delivery.scope() and scope.batch().
  • ioring: adds the public module contract. Additive, but new public surface in a crate already cutting 0.2.0.
  • ioring: RegisteredBuffers::get now returns io::Result<&[u8]> rather than Option<&B>.
  • ioring: RegisteredBuffers::get_mut returns io::Result<&mut [u8]> rather than io::Result<&mut B>. Callers writing bytes are unaffected; callers relying on &mut B were relying on the unsound behaviour.
  • ioring: RegisteredUse is now a struct rather than a newtype over Arc. It is only ever produced by this crate and consumed as an opaque Token payload, so callers that treat it as opaque are unaffected.
  • ioring: write, write_raw, write_registered and write_registered_raw take a trailing WriteCaching argument; flush and flush_raw take a trailing FlushMode argument. WriteCaching::Cached and FlushMode::Default reproduce the previous behaviour exactly.
  • ioring: Batch::flush and Batch::flush_raw take FlushCoverage instead of PushOptions. Callers pass FlushCoverage::CoversPrecedingOperations to make preceding writes durable, or FlushCoverage::Unordered for the previous (non-covering) behaviour of PushOptions::default().
  • ioring: keep the IORING_BUFFER_INFO array alive until the kernel reads it

Features

  • guard-alloc: add a guard-page global allocator and calibrate it against D-32 (983afbc)
  • guard-alloc: fill fresh allocations with a tracked, seeded poison pattern (36ecd8a)
  • ioring: add a fault-injection seam that transforms real completions (16bb39b)
  • ioring: add RingContract, this crate's conservation rules made executable (bfbb840)
  • ioring: commit epoch-log records by group commit (f15e504)
  • ioring: count registered-buffer uses per buffer, and add get_mut (222bde1)
  • ioring: expose the kernel's write flags and flush modes (1c21394)
  • ioring: gate windows-threadpool-sys behind a default-on feature (d374cc6)
  • ioring: hand back the ring's completion event without surrendering the ring (0ed5e87)
  • ioring: implement all three epoch-commit strategies behind one interface (3bf25bf)
  • ioring: let a RegisteredFile be pushed without unsafe (d2373b6)
  • ioring: measure the three commit strategies on the running machine (8399753)
  • ioring: name the ring conditions a consumer has to branch on (8d51124)
  • ioring: order a non-ring FSCTL against ring epochs in the epoch-log sample (22c11de)
  • ioring: replace EventDelivery::ring with a narrowed RingScope (21f1203)
  • ioring: replay and verify the epoch log against its own contract (002f87d)
  • ioring: run the epoch log's control plane on the thread pool (e90e90a)
  • ioring: wait the epoch log on its completion event and a shutdown latch (b96a6be)

Bug Fixes

  • ioring: deliver completions queued before EventDelivery handover (f1b48c8)
  • ioring: keep the IORING_BUFFER_INFO array alive until the kernel reads it (66272ff)
  • ioring: make RegisteredBuffers::get refuse a buffer a read is landing into (49d928c)
  • ioring: RegisteredBuffers::get takes &mut self, closing a borrow hole (7da99a7)
  • ioring: remove a dead guard in strategy.rs and correct what catches what (e33161d)
  • ioring: require an explicit barrier decision on every flush (5f8577b)
  • ioring: require both checkpoint operations to succeed before authorising a reclaim (982b291)
  • ioring: stop get_mut handing out the registered buffer itself (ffed97c)
  • ioring: unbreak CI clippy, and queue the get() borrow hole as M19 (a38f754)