authorgravatar for vnc5@users.noreply.github.comvnc5 <vnc5@users.noreply.github.com> 2021-10-09 14:04:16+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-01-27 19:49:12+02:00
log1adb6440db30e5906f685ca5c188ce87bbe0d475
treebd51aebeed4e91335798ead06c57f62a7f088888
parent80ac022c4667e1995ccdf70fff90e5af26b6eb97

fix startup procedure for async WinMain


1 files changed, 11 insertions(+), 3 deletions(-)

lib/std/start.zig+11-3
......@@ -511,9 +511,9 @@ inline fn initEventLoopAndCallWinMain() std.os.windows.INT {
511511 };
512512 defer loop.deinit();
513513
514 var result: u8 = undefined;
515 var frame: @Frame(callMainAsync) = undefined;
516 _ = @asyncCall(&frame, &result, callMainAsync, .{loop});
514 var result: std.os.windows.INT = undefined;
515 var frame: @Frame(callWinMainAsync) = undefined;
516 _ = @asyncCall(&frame, &result, callWinMainAsync, .{loop});
517517 loop.run();
518518 return result;
519519 }
......@@ -532,6 +532,14 @@ fn callMainAsync(loop: *std.event.Loop) callconv(.Async) u8 {
532532 return callMain();
533533}
534534
535fn callWinMainAsync(loop: *std.event.Loop) callconv(.Async) std.os.windows.INT {
536 // This prevents the event loop from terminating at least until main() has returned.
537 // TODO This shouldn't be needed here; it should be in the event loop code.
538 loop.beginOneEvent();
539 defer loop.finishOneEvent();
540 return call_wWinMain();
541}
542
535543// This is not marked inline because it is called with @asyncCall when
536544// there is an event loop.
537545pub fn callMain() u8 {