summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2003-03-17 03:09:31 +0000
committerHavoc Pennington <hp@redhat.com>2003-03-17 03:09:31 +0000
commit15f02e1071ab14a7bc937cb61a4439a69c14f1a5 (patch)
tree5e2144d421b2f4288df7c32acf091bd70be6f525
parent0e298fbeb513ea03d1ddc80124aec3a1d19a967d (diff)
2003-03-16 Havoc Pennington <hp@pobox.com>
* dbus/dbus-bus.c (ensure_bus_data): fix double-unref of the data slot
-rw-r--r--ChangeLog4
-rw-r--r--bus/dispatch.c2
-rw-r--r--dbus/dbus-bus.c18
-rw-r--r--dbus/dbus-connection.c2
4 files changed, 18 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index ad0cee4f..a4784233 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-03-16 Havoc Pennington <hp@pobox.com>
+
+ * dbus/dbus-bus.c (ensure_bus_data): fix double-unref of the data slot
+
2003-03-17 Anders Carlsson <andersca@codefactory.se>
* bus/activation.c (bus_activation_activate_service): Append
diff --git a/bus/dispatch.c b/bus/dispatch.c
index 4f550f9a..ffb7bd9f 100644
--- a/bus/dispatch.c
+++ b/bus/dispatch.c
@@ -980,7 +980,7 @@ bus_dispatch_test (const DBusString *test_data_dir)
check1_try_iterations (context, "create_and_hello",
check_hello_connection);
-
+
dbus_connection_disconnect (foo);
if (bus_connection_dispatch_one_message (foo))
_dbus_assert_not_reached ("extra message in queue");
diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c
index 8f7fb90e..c05d74a5 100644
--- a/dbus/dbus-bus.c
+++ b/dbus/dbus-bus.c
@@ -83,12 +83,16 @@ data_slot_ref (void)
dbus_mutex_lock (slot_lock);
if (bus_data_slot < 0)
- bus_data_slot = dbus_connection_allocate_data_slot ();
-
- if (bus_data_slot < 0)
{
- dbus_mutex_unlock (slot_lock);
- return FALSE;
+ bus_data_slot = dbus_connection_allocate_data_slot ();
+
+ if (bus_data_slot < 0)
+ {
+ dbus_mutex_unlock (slot_lock);
+ return FALSE;
+ }
+
+ _dbus_assert (bus_data_slot_refcount == 0);
}
bus_data_slot_refcount += 1;
@@ -103,8 +107,8 @@ data_slot_unref (void)
{
dbus_mutex_lock (slot_lock);
- _dbus_assert (bus_data_slot >= 0);
_dbus_assert (bus_data_slot_refcount > 0);
+ _dbus_assert (bus_data_slot >= 0);
bus_data_slot_refcount -= 1;
@@ -149,7 +153,7 @@ ensure_bus_data (DBusConnection *connection)
if (!dbus_connection_set_data (connection, bus_data_slot, bd,
bus_data_free))
{
- bus_data_free (bd);
+ dbus_free (bd);
data_slot_unref ();
return NULL;
}
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index d6ee104a..ed677e74 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -866,6 +866,8 @@ _dbus_connection_last_unref (DBusConnection *connection)
DBusHashIter iter;
DBusList *link;
+ _dbus_assert (connection->refcount == 0);
+
/* You have to disconnect the connection before unref:ing it. Otherwise
* you won't get the disconnected message.
*/