Date: Mon, 17 Mar 2008 01:33:51 -0300 From: User Lenzi <lenzi@k1.com.br> To: freebsd-questions@freebsd.org Subject: Re: EVOLUTION SLOW START , a workaround Message-ID: <1205728431.3323.0.camel@k2.cwb.casa> In-Reply-To: <20080315010138.ddec4e8e.ejcerejo@optonline.net> References: <94136a2c0803101454l6ca76c99ma1fa1083d7ea2137@mail.gmail.com> <20080310231502.V7454@wojtek.tensor.gdynia.pl> <1205268305.52059.16.camel@localhost> <20080315010138.ddec4e8e.ejcerejo@optonline.net>
next in thread | previous in thread | raw e-mail | index | archive | help
> I'm trying to use your patch but it fails to apply patch. > It results in: > > ecerejo# patch -uspl </usr/home/webdude/patch.b > File to patch: patch-gmodule::gmodule-dl.c > 4 out of 4 hunks failed--saving rejects to patch-gmodule::gmodule-dl.c.rej > > OK, probably, it is because you did not put the module (the patch in the correct place) the patch I publish on the email is to replace the glib patch that is located in: /usr/ports/devel/glib20/files/patch-gmodule::gmodule-dl.c the idea is: you copy the code from the email, and replace the file in the /usr/ports/devel/glib20/files/patch-gmodule::gmodule-dl.c and then just build glib20 again. either by the comand (cd /usr/ports/devel/glib20;make clean deinstall install) or portupgrade -fp devel/glib20 should work.... There is no need to rebuild evolution. the patch works with glib versions 2 tested on glib2.12 till 2.16 (the last one). ================cut=========================== --- 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); ===============================cut==========================
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1205728431.3323.0.camel>