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/ › Threaded.zig › groupCancel
groupCancel
Threaded.groupCancel
fn groupCancel (userdata : ?*anyopaque , type_erased : *Io .Group , initial_token : *anyopaque ) void
File
Code
fn groupCancel (userdata : ?*anyopaque , type_erased : *Io .Group , initial_token : *anyopaque ) void {
_ = initial_token ;
if (builtin .single_threaded ) unreachable ;
const t : *Threaded = @ptrCast (@alignCast (userdata ));
const g : Group = .{ .ptr = type_erased };
var num_completed : std .atomic .Value (u32 ) = .init (0 );
g .awaiter ().* = &num_completed ;
const pre_cancel_status = g .status ().fetchOr (.{
.num_running = 0 ,
.have_awaiter = true ,
.canceled = true ,
}, .acq_rel );
assert (!pre_cancel_status .have_awaiter );
assert (!pre_cancel_status .canceled );
if (pre_cancel_status .num_running == 0 ) {
// until we return, so we can access `g.status()` non-atomically.
g .status ().raw .have_awaiter = false ;
g .status ().raw .canceled = false ;
return ;
}
g .waitForCancelWithSignaling (t , &num_completed , false );
g .status ().raw = .{ .num_running = 0 , .have_awaiter = false , .canceled = false };
}