From owner-freebsd-questions@FreeBSD.ORG Tue Mar 11 23:54:02 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 55FB2106566C for ; Tue, 11 Mar 2008 23:54:02 +0000 (UTC) (envelope-from ejcerejo@optonline.net) Received: from mta4.srv.hcvlny.cv.net (mta4.srv.hcvlny.cv.net [167.206.4.199]) by mx1.freebsd.org (Postfix) with ESMTP id 2F36D8FC20 for ; Tue, 11 Mar 2008 23:54:02 +0000 (UTC) (envelope-from ejcerejo@optonline.net) Received: from localhost (ool-44c03822.dyn.optonline.net [68.192.56.34]) by mta4.srv.hcvlny.cv.net (Sun Java System Messaging Server 6.2-8.04 (built Feb 28 2007)) with SMTP id <0JXL002AWBPUUBQ0@mta4.srv.hcvlny.cv.net> for freebsd-questions@freebsd.org; Tue, 11 Mar 2008 19:53:55 -0400 (EDT) Date: Tue, 11 Mar 2008 19:53:51 -0400 From: "E. J. Cerejo" In-reply-to: <1205268305.52059.16.camel@localhost> To: sergio lenzi Message-id: <20080311195351.d427802d.ejcerejo@optonline.net> MIME-version: 1.0 X-Mailer: Sylpheed 2.4.8 (GTK+ 2.12.8; i386-portbld-freebsd7.0) Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7BIT References: <94136a2c0803101454l6ca76c99ma1fa1083d7ea2137@mail.gmail.com> <20080310231502.V7454@wojtek.tensor.gdynia.pl> <1205268305.52059.16.camel@localhost> Cc: freebsd-questions@freebsd.org Subject: Re: EVOLUTION SLOW START , a workaround X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Mar 2008 23:54:02 -0000 On Tue, 11 Mar 2008 17:45:05 -0300 sergio lenzi 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.