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>