gedit r6934 - in trunk: . gedit
- From: jessevdk svn gnome org
- To: svn-commits-list gnome org
- Subject: gedit r6934 - in trunk: . gedit
- Date: Mon, 2 Mar 2009 09:09:50 +0000 (UTC)
Author: jessevdk
Date: Mon Mar 2 09:09:50 2009
New Revision: 6934
URL: http://svn.gnome.org/viewvc/gedit?rev=6934&view=rev
Log:
* gedit/gedit-message-bus.c:
Fixed unregister_all to not remove items from a hash table while
iterating over the hash table (uses g_hash_table_foreach_remove
instead)
Modified:
trunk/ChangeLog
trunk/gedit/gedit-message-bus.c
Modified: trunk/gedit/gedit-message-bus.c
==============================================================================
--- trunk/gedit/gedit-message-bus.c (original)
+++ trunk/gedit/gedit-message-bus.c Mon Mar 2 09:09:50 2009
@@ -655,6 +655,28 @@
return message_type;
}
+static void
+gedit_message_bus_unregister_real (GeditMessageBus *bus,
+ GeditMessageType *message_type,
+ gboolean remove_from_store)
+{
+ gchar *identifier;
+
+ g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
+
+ identifier = gedit_message_type_identifier (gedit_message_type_get_object_path (message_type),
+ gedit_message_type_get_method (message_type));
+
+ /* Keep message type alive for signal emission */
+ gedit_message_type_ref (message_type);
+
+ if (!remove_from_store || g_hash_table_remove (bus->priv->types, identifier))
+ g_signal_emit (bus, message_bus_signals[UNREGISTERED], 0, message_type);
+
+ gedit_message_type_unref (message_type);
+ g_free (identifier);
+}
+
/**
* gedit_message_bus_unregister:
* @bus: a #GeditMessageBus
@@ -670,21 +692,8 @@
gedit_message_bus_unregister (GeditMessageBus *bus,
GeditMessageType *message_type)
{
- gchar *identifier;
-
g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
-
- identifier = gedit_message_type_identifier (gedit_message_type_get_object_path (message_type),
- gedit_message_type_get_method (message_type));
-
- // Keep message type alive for signal emission
- gedit_message_type_ref (message_type);
-
- if (g_hash_table_remove (bus->priv->types, identifier))
- g_signal_emit (bus, message_bus_signals[UNREGISTERED], 0, message_type);
-
- gedit_message_type_unref (message_type);
- g_free (identifier);
+ gedit_message_bus_unregister_real (bus, message_type, TRUE);
}
typedef struct
@@ -693,7 +702,7 @@
const gchar *object_path;
} UnregisterInfo;
-static void
+static gboolean
unregister_each (const gchar *identifier,
GeditMessageType *message_type,
UnregisterInfo *info)
@@ -701,8 +710,11 @@
if (strcmp (gedit_message_type_get_object_path (message_type),
info->object_path) == 0)
{
- gedit_message_bus_unregister (info->bus, message_type);
+ gedit_message_bus_unregister_real (info->bus, message_type, FALSE);
+ return TRUE;
}
+
+ return FALSE;
}
/**
@@ -726,9 +738,9 @@
g_return_if_fail (GEDIT_IS_MESSAGE_BUS (bus));
g_return_if_fail (object_path != NULL);
- g_hash_table_foreach (bus->priv->types,
- (GHFunc)unregister_each,
- &info);
+ g_hash_table_foreach_remove (bus->priv->types,
+ (GHRFunc)unregister_each,
+ &info);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]