simple-shm: handle shm buffer failure
authorPekka Paalanen <ppaalanen@gmail.com>
Wed, 18 Apr 2012 10:23:09 +0000 (13:23 +0300)
committerPekka Paalanen <ppaalanen@gmail.com>
Thu, 26 Apr 2012 12:44:45 +0000 (15:44 +0300)
Do not segfault, if creating the shm buffer fails.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
clients/simple-shm.c

index 65c0eae..850567d 100644 (file)
@@ -101,6 +101,17 @@ create_window(struct display *display, int width, int height)
        struct window *window;
        
        window = malloc(sizeof *window);
+
+       window->buffer = create_shm_buffer(display,
+                                          width, height,
+                                          WL_SHM_FORMAT_XRGB8888,
+                                          &window->shm_data);
+
+       if (!window->buffer) {
+               free(window);
+               return NULL;
+       }
+
        window->callback = NULL;
        window->display = display;
        window->width = width;
@@ -108,10 +119,6 @@ create_window(struct display *display, int width, int height)
        window->surface = wl_compositor_create_surface(display->compositor);
        window->shell_surface = wl_shell_get_shell_surface(display->shell,
                                                           window->surface);
-       window->buffer = create_shm_buffer(display,
-                                          width, height,
-                                          WL_SHM_FORMAT_XRGB8888,
-                                          &window->shm_data);
 
        wl_shell_surface_set_toplevel(window->shell_surface);
 
@@ -293,6 +300,8 @@ main(int argc, char **argv)
 
        display = create_display();
        window = create_window(display, 250, 250);
+       if (!window)
+               return 1;
 
        sigint.sa_handler = signal_int;
        sigemptyset(&sigint.sa_mask);