diff --git a/src/console/main.zig b/src/console/main.zig index b453df4..c9c67ff 100644 --- a/src/console/main.zig +++ b/src/console/main.zig @@ -413,7 +413,8 @@ pub fn main() !void { var app = try vxfw.App.init(allocator); defer app.deinit(); - const asd = Observer(*Tab){ + const childrenLoadedObserver = try allocator.create(Observer(*Tab)); + childrenLoadedObserver.* = Observer(*Tab){ .ctx = @ptrCast(@alignCast(&app)), .update = (struct{fn update(ctx: *anyopaque, _: *Tab)void { const app1: *vxfw.App = @ptrCast(@alignCast(ctx)); @@ -421,7 +422,7 @@ pub fn main() !void { }}).update, }; - try app_common_model.appState.tabChildrenLoaded.attach(&asd); + try app_common_model.appState.tabChildrenLoaded.attach(childrenLoadedObserver); try app.run(model.widget(), .{}); diff --git a/src/core/app_state.zig b/src/core/app_state.zig index 1e250cf..7dccf6b 100644 --- a/src/core/app_state.zig +++ b/src/core/app_state.zig @@ -45,7 +45,8 @@ pub const AppState = struct { } else null; if (index) |i| { - tab.childrenLoaded.observers.swapRemove(i); + const removed = tab.childrenLoaded.observers.swapRemove(i); + self.allocator.destroy(removed); } //TODO: remove from tabs diff --git a/src/core/observable.zig b/src/core/observable.zig index 4bd629f..9e47e7d 100644 --- a/src/core/observable.zig +++ b/src/core/observable.zig @@ -12,7 +12,7 @@ pub fn Observable(T: type) type { } pub fn deinit(self: *Self) void { - for(self.observers)|o| { + for(self.observers.items)|o| { self.allocator.destroy(o); } self.observers.deinit();