diff --git a/river/Root.zig b/river/Root.zig index 7399408..dcce9c7 100644 --- a/river/Root.zig +++ b/river/Root.zig @@ -192,7 +192,6 @@ pub fn init(self: *Self) !void { } pub fn deinit(self: *Self) void { - self.scene.tree.node.destroy(); self.output_layout.destroy(); self.transaction_timeout.remove(); } diff --git a/river/Server.zig b/river/Server.zig index 073de61..0c93dd3 100644 --- a/river/Server.zig +++ b/river/Server.zig @@ -190,6 +190,12 @@ pub fn deinit(self: *Self) void { self.wl_server.destroyClients(); self.backend.destroy(); + + // The scene graph needs to be destroyed after the backend but before the renderer + // Output destruction requires the scene graph to still be around while the scene + // graph may require the renderer to still be around to destroy textures it seems. + self.root.scene.tree.node.destroy(); + self.renderer.destroy(); self.allocator.destroy();