mirror of
https://github.com/ziglang/zig.git
synced 2026-01-06 05:25:10 +00:00
io_uring: improve IO_Uring.copy_cqe
copy_cqes() is not guaranteed to return as many CQEs as provided in the `wait_nr` argument, meaning the assert in `copy_cqe` can trigger. Instead, loop until we do get at least one CQE returned. This mimics the behaviour of liburing's _io_uring_get_cqe.
This commit is contained in:
parent
8771ef897a
commit
4d38f456ea
@ -300,9 +300,10 @@ pub const IO_Uring = struct {
|
||||
/// A convenience method for `copy_cqes()` for when you don't need to batch or peek.
|
||||
pub fn copy_cqe(ring: *IO_Uring) !io_uring_cqe {
|
||||
var cqes: [1]io_uring_cqe = undefined;
|
||||
const count = try ring.copy_cqes(&cqes, 1);
|
||||
assert(count == 1);
|
||||
return cqes[0];
|
||||
while (true) {
|
||||
const count = try ring.copy_cqes(&cqes, 1);
|
||||
if (count > 0) return cqes[0];
|
||||
}
|
||||
}
|
||||
|
||||
/// Matches the implementation of cq_ring_needs_flush() in liburing.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user