clear wl pixmap cache on client free instead of leaking
authorMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 5 Feb 2015 21:31:47 +0000 (16:31 -0500)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Thu, 5 Feb 2015 21:32:10 +0000 (16:32 -0500)
src/bin/e_pixmap.c

index 3d747d9b0bc32c9740e24b632def13d9e7c41e7e..b4118659d396561b6b2fbaa952f0756519f9be27 100644 (file)
@@ -87,6 +87,14 @@ _e_pixmap_image_clear_x(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_U
 }
 #endif
 
+#if defined(HAVE_WAYLAND_CLIENTS) || defined(HAVE_WAYLAND_ONLY)
+static void
+_e_pixmap_image_clear_wl(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   E_FREE_LIST(data, _e_pixmap_resource_free);
+}
+#endif
+
 static void
 _e_pixmap_free(E_Pixmap *cp)
 {
@@ -110,7 +118,9 @@ _e_pixmap_free(E_Pixmap *cp)
       case E_PIXMAP_TYPE_WL:
 #if defined(HAVE_WAYLAND_CLIENTS) || defined(HAVE_WAYLAND_ONLY)
         if (!cp->resource_cache) break;
-        if (!cp->client)
+        if (cp->client)
+          evas_object_event_callback_add(cp->client->frame, EVAS_CALLBACK_FREE, _e_pixmap_image_clear_wl, cp->resource_cache);
+        else
           {
              void *i;