Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Mar 2008 19:53:51 -0400
From:      "E. J. Cerejo" <ejcerejo@optonline.net>
To:        sergio lenzi <lenzi@k1.com.br>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: EVOLUTION  SLOW START , a workaround
Message-ID:  <20080311195351.d427802d.ejcerejo@optonline.net>
In-Reply-To: <1205268305.52059.16.camel@localhost>
References:  <94136a2c0803101454l6ca76c99ma1fa1083d7ea2137@mail.gmail.com> <20080310231502.V7454@wojtek.tensor.gdynia.pl> <1205268305.52059.16.camel@localhost>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 11 Mar 2008 17:45:05 -0300
sergio lenzi <lenzi@k1.com.br> wrote:

> Hello all
> 
> This week I have time to trace the problem with evolution that
> lasts too much time to start.
> 
> The problem is that glib on function g_module_load, searchs for a symbol
> g_module_check_init, g_module_unload... by default.
> 
> It occurs that the evolution code, that will be loaded, does not have
> those functions available... so th glib (and dlsym) tries to find the
> symbol in every load module in memory... and doing so consumes all cpu
> for several seconds, for each load module....
> 
> ! coded a solution for gmodule that tests for those special symbos, and
> if found, uses dlsymb(RTLD_NEXT,....) instead of dlsym(handler....) 
> so it will search a much less modules, and evolution will start in 3
> seconds... (20 times less...)
> 
> Of course the correct strategy is to correct code evolution module
> (libevolution-mail.so). will do next time....
> 
> modified file: /usr/ports/devel/glib20/files/patch-gmodule::gmodule-dl.c
> 
> please note this is only a temporary fix... the correct solution is to
> fix the 
> evolution module....
> 
> =============================================
> --- gmodule/gmodule-dl.c.orig	2008-02-07 03:24:53.000000000 -0200
> +++ gmodule/gmodule-dl.c	2008-03-11 18:53:44.000000000 -0300
> @@ -73,6 +73,14 @@
>  #endif	/* RTLD_GLOBAL */
>  
>  
> +static char *special_names[]={
> +	"g_module_check_init",
> +	"g_module_unload",
> +	"e_plugin_lib_enable",
> +	NULL
> +};
> +	
> +
>  /* --- functions --- */
>  static gchar*
>  fetch_dlerror (gboolean replace_null)
> @@ -106,6 +114,7 @@
>  static gpointer
>  _g_module_self (void)
>  {
> +#ifndef __FreeBSD__
>    gpointer handle;
>    
>    /* to query symbols from the program itself, special link options
> @@ -117,6 +126,9 @@
>      g_module_set_error (fetch_dlerror (TRUE));
>    
>    return handle;
> +#else
> +  return RTLD_DEFAULT;
> +#endif
>  }
>  
>  static void
> @@ -141,9 +153,19 @@
>  {
>    gpointer p;
>    gchar *msg;
> +  char 	**pn;
>  
>    fetch_dlerror (FALSE);
> -  p = dlsym (handle, symbol_name);
> +
> +  for (pn=special_names;*pn;pn++) {
> +	if (!strcmp(*pn,symbol_name)) {
> +		p=dlsym(RTLD_NEXT,symbol_name);
> +		break;
> +	}
> +  }
> +
> +  if (! *pn)
> +      	p = dlsym (handle, symbol_name);
>    msg = fetch_dlerror (FALSE);
>    if (msg)
>      g_module_set_error (msg);
> 
> 
> _______________________________________________
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org"

I stopped using gnome because of evolution and few other admin apps that don't work, it took about 80 seconds to open evolution so I got fed up with it and changed to xfce4, personally I think there's quite a few things broken with gnome, specially the admin part of it which is not a problem with KDE.  Posted the problem a few times and all I've got was the freebsd loader spent quit a bit of time looking for every evolution plugin so I disabled them and it still took about 50 seconds to open which was unacceptable to me.  Ubuntu on a slower machine only takes about 3 seconds with every plugin enabled so it was obvious to me that there was a bug somewhere.  I hope they apply your fix to the gnome port.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080311195351.d427802d.ejcerejo>