discomfitor pushed a commit to branch enlightenment-0.22.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=600a739f9134eb3541e19c2e4c35a86848c7b8eb

commit 600a739f9134eb3541e19c2e4c35a86848c7b8eb
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Jul 19 01:58:00 2018 +0900

    e wl - fix e pixmap tracking to remove from both aliases and pixmaps
    
    on pixmap free only the pixmaps entry was deleted not the pixmaps hash
    one. this led to lookup of stale pixmaps in the aliases hash... and
    then a crash.
    
    also use the correct local type with the correct byte order as well.
    this has probably been an issue for a while but now internal windows
    should work much better without crashes.
    
    @fix
---
 src/bin/e_pixmap.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/bin/e_pixmap.c b/src/bin/e_pixmap.c
index 346b2726a..4c667757c 100644
--- a/src/bin/e_pixmap.c
+++ b/src/bin/e_pixmap.c
@@ -297,7 +297,28 @@ e_pixmap_free(E_Pixmap *cp)
    if (!cp) return 0;
    if (--cp->refcount) return cp->refcount;
    e_pixmap_image_clear(cp, EINA_FALSE);
-   eina_hash_del_by_key(pixmaps[cp->type], &cp->win);
+   switch (cp->type)
+     {
+      case E_PIXMAP_TYPE_X:
+#ifndef HAVE_WAYLAND_ONLY
+          {
+             Ecore_X_Window xwin = cp->win;
+             eina_hash_del_by_key(pixmaps[cp->type], &xwin);
+             eina_hash_del_by_key(aliases[cp->type], &xwin);
+          }
+#endif
+        break;
+      case E_PIXMAP_TYPE_WL:
+#ifdef HAVE_WAYLAND
+          {
+             int64_t id = cp->win;
+             eina_hash_del_by_key(pixmaps[cp->type], &id);
+             eina_hash_del_by_key(aliases[cp->type], &id);
+          }
+#endif
+        break;
+      default: break;
+     }
    return 0;
 }
 

-- 


Reply via email to