Make dynamically loaded modules resident.

This commit is contained in:
Matthew Barnes 2011-08-06 01:58:24 -04:00
commit 37bb281045
2 changed files with 40 additions and 3 deletions

View file

@ -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:

View file

@ -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 <mbarnes@redhat.com> - 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 <mbarnes@redhat.com> - 3.1.4-1
- Update to 3.1.4