Commit Diff


commit - 094f9ac02972f82c21854aa3e29bfec506aa381f
commit + 7a04e249c1fa722589158b4cf17ccabd667525b0
blob - db9ae52bb8dacd0981508992a66f6905e9a096c3
blob + a1c41e368fc66dcea3a854180376e958f84ae0e9
--- ev/ev.ha
+++ ev/ev.ha
@@ -54,6 +54,7 @@ export type evloop = struct {
 	add: *fn(*evloop, io::file, event, *fn(io::file, event, nullable *opaque) void, nullable *opaque) void,
 	del: *fn(*evloop, io::file) void,
 	loop: *fn(*evloop) (void | poll::error),
+	loopbreak: *fn(*evloop) void,
 };
 
 type base = struct {
@@ -70,6 +71,7 @@ let _default = base {
 	add = &evadd,
 	del = &evdel,
 	loop = &loop,
+	loopbreak = &evloopbreak,
 	sigpipe = void,
 	sigcb = void,
 	...
@@ -81,6 +83,7 @@ export fn new() *evloop = alloc(base {
 	add = &evadd,
 	del = &evdel,
 	loop = &loop,
+	loopbreak = &evloopbreak,
 	sigpipe = void,
 	sigcb = void,
 	...
@@ -167,6 +170,11 @@ export fn loop(evloop: *evloop) (void | poll::error) =
 	};
 };
 
-export fn loopexit() void = {
-	global.stop = true;
+export fn loopbreak() void = {
+	global.loopbreak(global);
 };
+
+export fn evloopbreak(evloop: *evloop) void = {
+	const b = evloop: *base;
+	b.stop = true;
+};