EVOLUTION SLOW START , a workaround

User Lenzi lenzi at k1.com.br
Mon Mar 17 04:33:56 UTC 2008



> 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==========================


More information about the freebsd-questions mailing list