core: synchronize global .init before first .tick

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2024-04-16 20:48:04 -07:00
parent 2c73f8c518
commit 4ba8addb3c
2 changed files with 8 additions and 0 deletions

View file

@ -16,6 +16,7 @@ pub const global_events = .{
pub const local_events = .{
.init = .{ .handler = init },
.init_done = .{ .handler = fn () void },
// TODO(important): need some way to tie event execution to a specific thread once we have a
// multithreaded dispatch implementation
@ -45,6 +46,7 @@ fn init(core: *Mod) !void {
});
core.sendGlobal(.init, .{});
core.send(.init_done, .{});
}
fn deinit(core: *Mod) void {

View file

@ -14,6 +14,12 @@ pub fn initModule() !void {
// Initialize the global set of Mach modules used in the program.
try mods.init(std.heap.c_allocator);
mods.mod.mach_core.send(.init, .{});
// Dispatch events until this .mach_core.init_done is sent
try mods.dispatch(.{ .until = .{
.module_name = mods.moduleNameToID(.mach_core),
.local_event = mods.localEventToID(.mach_core, .init_done),
} });
}
/// Tick runs a single step of the main loop on the main OS thread.