xwayland: Better handle a race with X
authorJason Ekstrand <jason.ekstrand@intel.com>
Thu, 24 Jul 2014 20:17:47 +0000 (13:17 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 24 Jul 2014 20:19:13 +0000 (13:19 -0700)
If X windows are created and destroyed very fast sometimes the WM window
object gets created and destroyed before we get around to handling client
messages.  Failing to check that the window is still valid can result in a
segfault.

xwayland/window-manager.c

index 5d3a2e5..6cac278 100644 (file)
@@ -1403,6 +1403,12 @@ weston_wm_handle_client_message(struct weston_wm *wm,
               client_message->data.data32[4],
               client_message->window);
 
+       /* The window may get created and destroyed before we actually
+        * handle the message.  If it doesn't exist, bail.
+        */
+       if (!window)
+               return;
+
        if (client_message->type == wm->atom.net_wm_moveresize)
                weston_wm_window_handle_moveresize(window, client_message);
        else if (client_message->type == wm->atom.net_wm_state)