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 standard library.
std › Io › Kqueue › AsyncClosure › call Private Function call Doc Source Private Function std.Io.Kqueue.AsyncClosure.call
fn call (closure : *AsyncClosure , message : *const SwitchMessage ) callconv (.withStackAlign (.c , @alignOf (AsyncClosure ))) noreturn Params File Io/Kqueue.zig: 588
588
589
590
591
592
593
594
595
596
597
598
599
600
601 fn call (closure : *AsyncClosure , message : *const SwitchMessage ) callconv (.withStackAlign (.c , @alignOf (AsyncClosure ))) noreturn {
message .handle (closure .kqueue );
const fiber = closure .fiber ;
std .log .debug ("{*} performing async" , .{fiber });
closure .start (closure .contextPointer (), fiber .resultBytes (closure .result_align ));
const awaiter = @atomicRmw (?*Fiber , &fiber .awaiter , .Xchg , Fiber .finished , .acq_rel );
const ready_awaiter = r : {
const a = awaiter orelse break :r null ;
if (@atomicRmw (bool , &closure .already_awaited , .Xchg , true , .acq_rel )) break :r null ;
break :r a ;
};
closure .kqueue .yield (ready_awaiter , .nothing );
unreachable ; // switched to dead fiber
}