shell: Fix 2 switcher crashes.
authorAlex Wu <zhiwen.wu@linux.intel.com>
Mon, 12 Mar 2012 08:06:01 +0000 (16:06 +0800)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 21 Mar 2012 02:43:54 +0000 (22:43 -0400)
In case of no regular window, switcher will crash in switch_next()
due to "next == NULL" and in switcher_destroy() due to
"switcher->current == NULL".

src/shell.c

index 765b0a4..b294c20 100644 (file)
@@ -1840,6 +1840,9 @@ switcher_next(struct switcher *switcher)
        if (next == NULL)
                next = first;
 
+       if (next == NULL)
+               return;
+
        wl_list_remove(&switcher->listener.link);
        wl_list_insert(next->surface.resource.destroy_listener_list.prev,
                       &switcher->listener.link);
@@ -1871,7 +1874,8 @@ switcher_destroy(struct switcher *switcher, uint32_t time)
                weston_surface_damage(surface);
        }
 
-       activate(compositor->shell, switcher->current, device, time);
+       if (switcher->current)
+               activate(compositor->shell, switcher->current, device, time);
        wl_list_remove(&switcher->listener.link);
        wl_input_device_end_keyboard_grab(&device->input_device, time);
        free(switcher);