Skip to content
Snippets Groups Projects
Commit 00db2ee5 authored by Kristian Høgsberg's avatar Kristian Høgsberg
Browse files

xwayland: Don't crash when we get configure notify for destroyed frame windows

We can get a destroy notify for the frame window after we've removed it
from the hash table.  This turns into a NULL pointer deref when we look up
the window and try to use it for debugging printout.

Fixes the failing xwayland test case.
parent 6780073d
No related branches found
No related tags found
No related merge requests found
......@@ -551,6 +551,16 @@ weston_wm_handle_configure_request(struct weston_wm *wm, xcb_generic_event_t *ev
weston_wm_window_schedule_repaint(window);
}
static int
our_resource(struct weston_wm *wm, uint32_t id)
{
const xcb_setup_t *setup;
setup = xcb_get_setup(wm->conn);
return (id & ~setup->resource_id_mask) == setup->resource_id_base;
}
static void
weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *event)
{
......@@ -559,14 +569,15 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *eve
struct weston_wm_window *window;
int x, y;
window = hash_table_lookup(wm->window_hash, configure_notify->window);
wm_log("XCB_CONFIGURE_NOTIFY (%s window %d) %d,%d @ %dx%d\n",
configure_notify->window == window->id ? "client" : "frame",
wm_log("XCB_CONFIGURE_NOTIFY (window %d) %d,%d @ %dx%d\n",
configure_notify->window,
configure_notify->x, configure_notify->y,
configure_notify->width, configure_notify->height);
if (our_resource(wm, configure_notify->window))
return;
window = hash_table_lookup(wm->window_hash, configure_notify->window);
/* resize falls here */
if (configure_notify->window != window->id)
return;
......@@ -671,16 +682,6 @@ weston_wm_window_transform(struct wl_listener *listener, void *data)
old_sy = sy;
}
static int
our_resource(struct weston_wm *wm, uint32_t id)
{
const xcb_setup_t *setup;
setup = xcb_get_setup(wm->conn);
return (id & ~setup->resource_id_mask) == setup->resource_id_base;
}
#define ICCCM_WITHDRAWN_STATE 0
#define ICCCM_NORMAL_STATE 1
#define ICCCM_ICONIC_STATE 3
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment