authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-11-06 15:08:29-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-11-06 15:08:29-05:00
log913f7d045020f7f3301201cf69e1d788439d8886
tree9af3f086918a054e8b56b3f7355aebc31b080155
parentc1e8fdf812692edb9c7e496b00294aa749e81079
signaturelock-open Commit is signed but in an unrecognized format.

improve the start code for evented I/O

When evented I/O is being used, prevent event loop from terminating at least until main() has returned.

1 files changed, 9 insertions(+), 2 deletions(-)

lib/std/special/start.zig+9-2
......@@ -202,8 +202,8 @@ inline fn initEventLoopAndCallMain() u8 {
202202 defer loop.deinit();
203203
204204 var result: u8 = undefined;
205 var frame: @Frame(callMain) = undefined;
206 _ = @asyncCall(&frame, &result, callMain);
205 var frame: @Frame(callMainAsync) = undefined;
206 _ = @asyncCall(&frame, &result, callMainAsync, loop);
207207 loop.run();
208208 return result;
209209 }
......@@ -214,6 +214,13 @@ inline fn initEventLoopAndCallMain() u8 {
214214 return @inlineCall(callMain);
215215}
216216
217fn callMainAsync(loop: *std.event.Loop) u8 {
218 // This prevents the event loop from terminating at least until main() has returned.
219 loop.beginOneEvent();
220 defer loop.finishOneEvent();
221 return callMain();
222}
223
217224// This is not marked inline because it is called with @asyncCall when
218225// there is an event loop.
219226fn callMain() u8 {