Page MenuHomePhabricator

Evas-preload segfaults
Closed, ResolvedPublic

Description

When attempting to bring up Ibar/Contents I get a segfault:

Aug 29 09:41:23 x280 kernel: Evas-preload[28160]: segfault at 28 ip 00007fb71f295b87 sp 00007fb70dc0cbb0 error 4 in libevas.so.1.21.99[7fb71f1d4000+18a000]

This happens every time. Also happens when I try to add applications to "Favorites" or "Startup"

Enlightenment version 0.22.99.23417
git hashes
efl: 1566cc
enlightenment: a03700

charlesgwaldman triaged this task as Showstopper Issues priority.
This comment was removed by charlesgwaldman.
charlesgwaldman added a comment.EditedSep 7 2018, 2:26 PM

I found the source of the problem after building with debug flags enabled.

L334 in evas_cache_image.c:

static void
_evas_cache_image_async_heavy(void *data)
{
   Evas_Cache_Image *cache;
   Image_Entry *current;
   int error;
   int pchannel;

   eina_thread_name_set(eina_thread_self(), "Evas-preload");

   current = data;

   if (!current->cache) return;
   SLKL(current->lock);
   pchannel = current->channel;
   current->channel++;
   cache = current->cache;

   if ((!current->flags.loaded) &&
       current->info.loader->threadable)
     {

GDB shows me that current.info.loader is NULL, so attempting to access current->info.loader->threadable is the source of the segfault.

Changing the code to:

if (!(current.cache && current->info.loader)  return;

makes the core dump go away, but also results in a few missing icons.

The icons display after a new .desktop file is added to my IBar, but the icon is *not* shown in the "Contents" dialog when I am adding it.

And there's still the question of why current->info.loader is NULL

This turns out to be due to an icon path in a .desktop file that I added myself.

According to the XDG spec for .desktop files this should be legal.

In my .desktop file, if I specify

Icon[en_US]=/home/cgw/Icons/wfmu_logo_94.png

then I get the missing icon, and a message (running with EINA_LOG_LEVEL=4)

DBG<27040>:ecore lib/ecore/ecore_thread.c:343 _ecore_short_job_cleanup() INF<27040>:efreet_icon lib/efreet/efreet_icon.c:241 efreet_icon_path_find() lookup for '/home/cgw/Icons/wfmu_logo_94.png' failed in theme 'Adwaita' with (nil).
cleanup work=0x55661b716930, thread=140534785271552INF<27040>:efreet_icon lib/efreet/efreet_icon.c:253 efreet_icon_path_find() lookup for '/home/cgw/Icons/wfmu_logo_94.png' failed in fallback too with (nil).

However, if I copy the wfmu_logo_94.png from ~/.Icons to /usr/share/icons, and change the .desktop file to say

Icon=wfmu_logo_94.png

then the icon shows up in the IBar/Contents menu.

So it seems like 2 problems:

  1. absolute pathnames in .desktop file cause loader=NULL
  2. loader=NULL leads to an (uncaught) segfault and core dump
This comment was removed by charlesgwaldman.

I have the same problem on a gentoo system, having just upgraded a previously working enlightenment to 0.22.3

Sep 26 11:25:57 hendrix kernel: Evas-preload[9668]: segfault at 28 ip 00007fa1a9188ae7 sp 00007fa1627e2db0 error 4 in libevas.so.1.20.717[7fa1a908c000+223000]

I'm getting this when mousing over Applications/Multimedia, and possibly at other times: my Enlightenment installation is now unstable with multiple user problems, but the Evas-preload segfault above is the only message to show up in /var/log/messages

cedric closed this task as Resolved.Nov 14 2018, 4:45 PM
cedric added subscribers: stefan_schmidt, cedric.

This was fixed in master with 0c1eab0cf999db94164b70a80cc3941561a26844 . I will backport that to efl-1.20 branch. The commit log doesn't seems to know why this is happening, which means there might still be a deeper problem. @stefan_schmidt you might want to keep an eye opened for this problem.