diff --git a/evolution-3.1.4-resident-modules.patch b/evolution-3.1.4-resident-modules.patch new file mode 100644 index 0000000..b4cc53a --- /dev/null +++ b/evolution-3.1.4-resident-modules.patch @@ -0,0 +1,29 @@ +diff -up evolution-3.1.4/e-util/e-module.c.resident-modules evolution-3.1.4/e-util/e-module.c +--- evolution-3.1.4/e-util/e-module.c.resident-modules 2011-06-13 10:25:40.000000000 -0400 ++++ evolution-3.1.4/e-util/e-module.c 2011-08-05 09:45:15.830757214 -0400 +@@ -139,6 +139,25 @@ module_load (GTypeModule *type_module) + + priv->load (type_module); + ++ /* XXX This is a Band-Aid for a design flaw in EExtension. If the ++ * "extensible_type" member of EExtensionClass is set to a GType ++ * that hasn't already been registered, then when the extension's ++ * module is unloaded the GType registration that was triggered ++ * by setting "extensible_type" will be invalidated and cause ++ * Evolution to malfunction when the module is loaded again. ++ * ++ * Extension modules get loaded and unloaded repeatedly by ++ * e_extensible_load_extensions(), which temporarily references ++ * all extension classes and picks out the ones it needs for a ++ * given EExtensible instance based on the "extensible_type" ++ * class member. ++ * ++ * Making the module resident prevents the aforementioned GType ++ * registration from being invalidated when the extension class ++ * is unreferenced. ++ */ ++ g_module_make_resident (priv->module); ++ + return TRUE; + + fail: diff --git a/evolution.spec b/evolution.spec index 448b1c7..5f33489 100644 --- a/evolution.spec +++ b/evolution.spec @@ -28,7 +28,7 @@ Name: evolution Version: 3.1.4 -Release: 1%{?dist} +Release: 2%{?dist} Group: Applications/Productivity Summary: Mail and calendar client for GNOME License: GPLv2+ and GFDL @@ -45,7 +45,10 @@ Obsoletes: libgal2 <= %{last_libgal2_version} Patch10: evolution-1.4.4-ldap-x86_64-hack.patch # RH bug #589555 -Patch13: evolution-2.30.1-help-contents.patch +Patch11: evolution-2.30.1-help-contents.patch + +# Make all dynamically-loaded modules resident. +Patch12: evolution-3.1.4-resident-modules.patch ## Dependencies ### @@ -202,7 +205,8 @@ This package contains the plugin to import Microsoft Personal Storage Table %prep %setup -q -n evolution-%{version} %patch10 -p1 -b .ldaphack -%patch13 -p1 -b .help-contents +%patch11 -p1 -b .help-contents +%patch12 -p1 -b .resident-modules mkdir -p krb5-fakeprefix/include mkdir -p krb5-fakeprefix/lib @@ -633,6 +637,10 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog +* Fri Aug 05 2011 Matthew Barnes - 3.1.4-2 +- Add patch to make all dynamically-loaded modules resident to avoid a + potential crash on startup. + * Sat Jul 23 2011 Matthew Barnes - 3.1.4-1 - Update to 3.1.4