zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 1adb6440db30e5906f685ca5c188ce87bbe0d475 (tree)
parent 80ac022c4667e1995ccdf70fff90e5af26b6eb97
Author: vnc5 <vnc5@users.noreply.github.com>
Date:   Sat,  9 Oct 2021 14:04:16 +0200

fix startup procedure for async WinMain

Diffstat:
Mlib/std/start.zig | 14+++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/lib/std/start.zig b/lib/std/start.zig @@ -511,9 +511,9 @@ inline fn initEventLoopAndCallWinMain() std.os.windows.INT { }; defer loop.deinit(); - var result: u8 = undefined; - var frame: @Frame(callMainAsync) = undefined; - _ = @asyncCall(&frame, &result, callMainAsync, .{loop}); + var result: std.os.windows.INT = undefined; + var frame: @Frame(callWinMainAsync) = undefined; + _ = @asyncCall(&frame, &result, callWinMainAsync, .{loop}); loop.run(); return result; } @@ -532,6 +532,14 @@ fn callMainAsync(loop: *std.event.Loop) callconv(.Async) u8 { return callMain(); } +fn callWinMainAsync(loop: *std.event.Loop) callconv(.Async) std.os.windows.INT { + // This prevents the event loop from terminating at least until main() has returned. + // TODO This shouldn't be needed here; it should be in the event loop code. + loop.beginOneEvent(); + defer loop.finishOneEvent(); + return call_wWinMain(); +} + // This is not marked inline because it is called with @asyncCall when // there is an event loop. pub fn callMain() u8 {