ilmControl: stricter checking in display_roundtrip_queue()
authorMarcus Fritzsch <marcus.fritzsch@xse.de>
Tue, 12 Aug 2014 11:47:49 +0000 (13:47 +0200)
committerNobuhiko Tanibata <NOBUHIKO_TANIBATA@denso.co.jp>
Mon, 1 Sep 2014 06:55:44 +0000 (15:55 +0900)
Signed-off-by: Marcus Fritzsch <marcus.fritzsch@xse.de>
ivi-layermanagement-api/ilmControl/src/ilm_control_wayland_platform.c

index 0869bd2..30b06e6 100644 (file)
@@ -129,10 +129,11 @@ struct ilm_control_context {
 static void roundtrip_done(void *data, struct wl_callback *callback,
                            uint32_t serial)
 {
-    (void) callback;
     (void) serial;
 
     *(int *)data = 1;
+
+    wl_callback_destroy(callback);
 }
 
 static struct wl_callback_listener roundtrip_listener = {roundtrip_done};
@@ -143,6 +144,12 @@ int display_roundtrip_queue(struct wl_display *display,
     int done = 0;
     int ret = 0;
     struct wl_callback *callback = wl_display_sync(display);
+
+    if (! callback)
+    {
+        return -1;
+    }
+
     wl_proxy_set_queue((void *)callback, queue);
     wl_callback_add_listener(callback, &roundtrip_listener, &done);
 
@@ -151,7 +158,10 @@ int display_roundtrip_queue(struct wl_display *display,
         ret = wl_display_dispatch_queue(display, queue);
     }
 
-    wl_callback_destroy(callback);
+    if (ret == -1 && !done)
+    {
+        wl_callback_destroy(callback);
+    }
 
     return ret;
 }