pidgin.2.5.6: 2f2d084c: applied changes from 8c5b1d77b08657a2e23...

elb at pidgin.im elb at pidgin.im
Tue Apr 28 20:20:57 EDT 2009


-----------------------------------------------------------------
Revision: 2f2d084c77a5b905a47b7b28508172451a2bb82f
Ancestor: 572ef25eacf298e7d3a90d1a57937529d1500039
Author: elb at pidgin.im
Date: 2009-04-28T20:51:59
Branch: im.pidgin.pidgin.2.5.6
URL: http://d.pidgin.im/viewmtn/revision/info/2f2d084c77a5b905a47b7b28508172451a2bb82f

Modified files:
        ChangeLog libpurple/core.c libpurple/plugin.c
        libpurple/plugin.h

ChangeLog: 

applied changes from 8c5b1d77b08657a2e236e8efe9bc2920f763911e
             through a336cc1fd3a1ce815f97303b8d5ae8988f8cbd5b

ChangeLog for the above.

-------------- next part --------------
============================================================
--- ChangeLog	cb289ceee6637006903e233c4658d828a66b0a9a
+++ ChangeLog	a5b17c7a4d6cb28b0055a01d2a1daca25bc52abe
@@ -1,6 +1,9 @@ version 2.5.6 (??/??/2009):
 Pidgin and Finch: The Pimpin' Penguin IM Clients That're Good for the Soul
 
 version 2.5.6 (??/??/2009):
+	libpurple:
+	* Fix various crashes on exit.
+
 	IRC:
 	* Correctly handle WHOIS for users who are joined to a large number of
 	  channels.
============================================================
--- libpurple/core.c	7901b8aea56c0d511c622be638656e6dd7e3c45f
+++ libpurple/core.c	92f9c866e318d322257bacd6c6131eeb875295c8
@@ -209,16 +209,11 @@ purple_core_quit(void)
 	/* The SSL plugins must be uninit before they're unloaded */
 	purple_ssl_uninit();
 
-	/* Unload all plugins before the UI because UI plugins might call
-	 * UI-specific functions */
-	purple_debug_info("main", "Unloading all plugins\n");
-	purple_plugins_destroy_all();
+	/* Unload all non-loader, non-prpl plugins before shutting down
+	 * subsystems. */
+	purple_debug_info("main", "Unloading normal plugins\n");
+	purple_plugins_unload(PURPLE_PLUGIN_STANDARD);
 
-	/* Shut down the UI before all the subsystems */
-	ops = purple_core_get_ui_ops();
-	if (ops != NULL && ops->quit != NULL)
-		ops->quit();
-
 	/* Save .xml files, remove signals, etc. */
 	purple_smileys_uninit();
 	purple_idle_uninit();
@@ -239,7 +234,16 @@ purple_core_quit(void)
 	purple_imgstore_uninit();
 	purple_network_uninit();
 
-	/* Everything after this must not try to read any prefs */
+	/* Everything after unloading all plugins must not fail if prpls aren't
+	 * around */
+	purple_debug_info("main", "Unloading all plugins\n");
+	purple_plugins_destroy_all();
+
+	ops = purple_core_get_ui_ops();
+	if (ops != NULL && ops->quit != NULL)
+		ops->quit();
+
+	/* Everything after prefs_uninit must not try to read any prefs */
 	purple_prefs_uninit();
 	purple_plugins_uninit();
 #ifdef HAVE_DBUS
@@ -247,7 +251,7 @@ purple_core_quit(void)
 #endif
 
 	purple_cmds_uninit();
-	/* Everything after this cannot try to write things to the confdir */
+	/* Everything after util_uninit cannot try to write things to the confdir */
 	purple_util_uninit();
 
 	purple_signals_uninit();
============================================================
--- libpurple/plugin.c	7309f99d3b111275964baa812057aad503d1e7ed
+++ libpurple/plugin.c	b7b0859b3da745950964c38c0d383d5aef8db7a9
@@ -1229,6 +1229,21 @@ void
 }
 
 void
+purple_plugins_unload(PurplePluginType type)
+{
+#ifdef PURPLE_PLUGINS
+	GList *l;
+
+	for (l = plugins; l; l = l->next) {
+		PurplePlugin *plugin = l->data;
+		if (plugin->info->type == type && purple_plugin_is_loaded(plugin))
+			purple_plugin_unload(plugin);
+	}
+
+#endif /* PURPLE_PLUGINS */
+}
+
+void
 purple_plugins_destroy_all(void)
 {
 #ifdef PURPLE_PLUGINS
============================================================
--- libpurple/plugin.h	be0247f88ff5b3005e4406be67b28325a0f8b5c7
+++ libpurple/plugin.h	8c221aa275a0dfb16ebb8c8a78d1614751f24c6f
@@ -503,6 +503,11 @@ void purple_plugins_unload_all(void);
 void purple_plugins_unload_all(void);
 
 /**
+ * Unloads all plugins of a specific type.
+ */
+void purple_plugins_unload(PurplePluginType type);
+
+/**
  * Destroys all registered plugins.
  */
 void purple_plugins_destroy_all(void);


More information about the Commits mailing list