git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commitf467de6d96941fdf321671c140b947f41c9b16ae
parente279f76d7a
authorIsaac Freund <[email protected]>
date2022-01-02 19:46
Seat: do a better job of cleaning up listeners

I thought this should be fine as river won't yield to the event loop
when Seat.deinit() is called before the wlroots seat is destroyed, but
a segfault on exit has been reported with a stack trace mentioning
wlr_seat_destroy(). Let's hope this clears that up.

 river/Seat.zig | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/river/Seat.zig b/river/Seat.zig
index b029c72..a81f002 100644
--- a/river/Seat.zig
+++ b/river/Seat.zig
@@ -128,6 +128,12 @@ pub fn deinit(self: *Self) void {
         self.focus_stack.remove(node);
         util.gpa.destroy(node);
     }
+
+    self.request_set_selection.link.remove();
+    self.request_start_drag.link.remove();
+    self.start_drag.link.remove();
+    if (self.pointer_drag) self.pointer_drag_destroy.link.remove();
+    self.request_set_primary_selection.link.remove();
 }
 
 /// Set the current focus. If a visible view is passed it will be focused.