authorgravatar for vnc5@users.noreply.github.comvnc5 <vnc5@users.noreply.github.com> 2021-10-09 14:04:16+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-02 21:59:47-07:00
log8f89056dc27a77e0e35739db5b4310e68a49d9d3
treeda11a8cf42b904ba1d38c1c184baf8b72925b877
parente8c4fec1b2ea676691aea89cdedd97ea17e26ed6

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 {...@@ -511,9 +511,9 @@ inline fn initEventLoopAndCallWinMain() std.os.windows.INT {
511 };511 };
512 defer loop.deinit();512 defer loop.deinit();
513513
514 var result: u8 = undefined;514 var result: std.os.windows.INT = undefined;
515 var frame: @Frame(callMainAsync) = undefined;515 var frame: @Frame(callWinMainAsync) = undefined;
516 _ = @asyncCall(&frame, &result, callMainAsync, .{loop});516 _ = @asyncCall(&frame, &result, callWinMainAsync, .{loop});
517 loop.run();517 loop.run();
518 return result;518 return result;
519 }519 }
...@@ -532,6 +532,14 @@ fn callMainAsync(loop: *std.event.Loop) callconv(.Async) u8 {...@@ -532,6 +532,14 @@ fn callMainAsync(loop: *std.event.Loop) callconv(.Async) u8 {
532 return callMain();532 return callMain();
533}533}
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
535// This is not marked inline because it is called with @asyncCall when543// This is not marked inline because it is called with @asyncCall when
536// there is an event loop.544// there is an event loop.
537pub fn callMain() u8 {545pub fn callMain() u8 {