From 4754b178247cecfb9cce1fa210aad4a7ac16679f Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Thu, 15 Sep 2022 22:53:18 +0000 Subject: [PATCH] wlserver: Fix stale wlr pointer in x11_surface_info + fix mouse focus surface destruction Stale pointers aaaa --- src/wlserver.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/wlserver.cpp b/src/wlserver.cpp index eeb351a..de9338a 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -366,6 +366,14 @@ static wlserver_wl_surface_info *get_wl_surface_info(struct wlr_surface *wlr_sur static void handle_wl_surface_destroy( struct wl_listener *l, void *data ) { wlserver_wl_surface_info *surf = wl_container_of( l, surf, destroy ); + if (surf->x11_surface) + surf->x11_surface->wlr = nullptr; + + if ( surf->wlr == wlserver.mouse_focus_surface ) + wlserver.mouse_focus_surface = nullptr; + + if ( surf->wlr == wlserver.kb_focus_surface ) + wlserver.kb_focus_surface = nullptr; delete surf; } @@ -1230,16 +1238,6 @@ void wlserver_x11_surface_info_finish( struct wlserver_x11_surface_info *surf ) wl_info->x11_surface = nullptr; } - if ( surf->wlr == wlserver.mouse_focus_surface ) - { - wlserver.mouse_focus_surface = nullptr; - } - - if ( surf->wlr == wlserver.kb_focus_surface ) - { - wlserver.kb_focus_surface = nullptr; - } - surf->wl_id = 0; surf->wlr = nullptr; wl_list_remove( &surf->pending_link );