Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › Io/ › Dispatch.zig › batchCancel
batchCancel
Dispatch.batchCancel
fn batchCancel (userdata : ?*anyopaque , batch : *Io .Batch ) void
File
Code
fn batchCancel (userdata : ?*anyopaque , batch : *Io .Batch ) void {
const ev : *Evented = @ptrCast (@alignCast (userdata ));
var index = batch .pending .head ;
while (index != .none ) {
const storage = &batch .storage [index .toIndex ()];
const pending = &storage .pending ;
const operation_userdata : *BatchOperationUserdata = .fromErased (&pending .userdata );
assert (operation_userdata .batch == batch );
operation_userdata .source .cancel ();
}
const queue : c .dispatch .queue_t = @ptrCast (batch .userdata orelse return );
if (batch .pending .head != .none ) {
var waiter : BatchWaiter = .{
.sleeper = .init (ev .queue , Thread .current ().currentFiber ()),
.queue = queue ,
.timer = BatchWaiter .already_signaled ,
};
if (batch .pending .head == .none ) queue .async (&waiter , &BatchWaiter .signal );
queue .as_object ().set_context (&waiter );
ev .yield (.{ .@"resume" = queue .as_object () });
}
batch .userdata = null ;
}