shell: free memory on move/resize error paths
authorPekka Paalanen <ppaalanen@gmail.com>
Wed, 4 Jan 2012 12:09:05 +0000 (14:09 +0200)
committerPekka Paalanen <ppaalanen@gmail.com>
Thu, 5 Jan 2012 07:10:49 +0000 (09:10 +0200)
Memory leaks noticed by Valgrind, when wl_input_device_update_grab()
fails.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
src/shell.c

index e2fd1e6..a39adb3 100644 (file)
@@ -170,8 +170,10 @@ weston_surface_move(struct weston_surface *es,
        move->surface = es;
 
        if (wl_input_device_update_grab(&wd->input_device,
-                                       &move->grab, &es->surface, time) < 0)
+                                       &move->grab, &es->surface, time) < 0) {
+               free(move);
                return 0;
+       }
 
        wl_input_device_set_pointer_focus(&wd->input_device,
                                          NULL, time, 0, 0, 0, 0);
@@ -268,16 +270,20 @@ weston_surface_resize(struct shell_surface *shsurf,
 
        if (edges == 0 || edges > 15 ||
            (edges & 3) == 3 || (edges & 12) == 12)
-               return 0;
+               goto err_out;
 
        if (wl_input_device_update_grab(&wd->input_device,
                                        &resize->grab, &es->surface, time) < 0)
-               return 0;
+               goto err_out;
 
        wl_input_device_set_pointer_focus(&wd->input_device,
                                          NULL, time, 0, 0, 0, 0);
 
        return 0;
+
+err_out:
+       free(resize);
+       return 0;
 }
 
 static void