From d9fcb3711e0d88d9c0d34144b837d6aecf678b6d Mon Sep 17 00:00:00 2001 From: David Zeuthen Date: Thu, 29 Apr 2010 18:06:42 -0400 Subject: Nuke ref_count and add return_if_fail guards Also allow NULL handlers --- gdbus/gdbusproxywatching.c | 50 +++++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/gdbus/gdbusproxywatching.c b/gdbus/gdbusproxywatching.c index 185b347..879274d 100644 --- a/gdbus/gdbusproxywatching.c +++ b/gdbus/gdbusproxywatching.c @@ -26,6 +26,7 @@ #include +#include "gdbusutils.h" #include "gdbusnamewatching.h" #include "gdbusproxywatching.h" #include "gdbuserror.h" @@ -55,7 +56,6 @@ static GHashTable *map_id_to_client = NULL; typedef struct { - volatile gint ref_count; guint id; GBusProxyAppearedCallback proxy_appeared_handler; GBusProxyVanishedCallback proxy_vanished_handler; @@ -79,37 +79,27 @@ typedef struct gboolean initial_construction; } Client; -static Client * -client_ref (Client *client) -{ - g_atomic_int_inc (&client->ref_count); - return client; -} - static void client_unref (Client *client) { - if (g_atomic_int_dec_and_test (&client->ref_count)) - { - /* ensure we're only called from g_bus_unwatch_proxy */ - g_assert (client->name_watcher_id == 0); + /* ensure we're only called from g_bus_unwatch_proxy */ + g_assert (client->name_watcher_id == 0); - /* we can do this because on_name_vanished() will have cleared these */ - g_assert (client->name_owner == NULL); - g_assert (client->connection == NULL); - g_assert (client->proxy == NULL); + /* we can do this because on_name_vanished() will have cleared these */ + g_assert (client->name_owner == NULL); + g_assert (client->connection == NULL); + g_assert (client->proxy == NULL); - g_free (client->name); - g_free (client->object_path); - g_free (client->interface_name); + g_free (client->name); + g_free (client->object_path); + g_free (client->interface_name); - if (client->main_context != NULL) - g_main_context_unref (client->main_context); + if (client->main_context != NULL) + g_main_context_unref (client->main_context); - if (client->user_data_free_func != NULL) - client->user_data_free_func (client->user_data); - g_free (client); - } + if (client->user_data_free_func != NULL) + client->user_data_free_func (client->user_data); + g_free (client); } /* ---------------------------------------------------------------------------------------------------- */ @@ -323,11 +313,9 @@ g_bus_watch_proxy (GBusType bus_type, Client *client; g_return_val_if_fail (bus_type != G_BUS_TYPE_NONE, 0); - g_return_val_if_fail (name != NULL, 0); - g_return_val_if_fail (proxy_appeared_handler != NULL, 0); - g_return_val_if_fail (proxy_vanished_handler != NULL, 0); - g_return_val_if_fail (object_path != NULL, 0); - g_return_val_if_fail (interface_name != NULL, 0); + g_return_val_if_fail (g_dbus_is_name (name), 0); + g_return_val_if_fail (g_variant_is_object_path (object_path), 0); + g_return_val_if_fail (g_dbus_is_interface_name (interface_name), 0); g_return_val_if_fail (g_type_is_a (interface_type, G_TYPE_DBUS_PROXY), 0); G_LOCK (lock); @@ -380,6 +368,8 @@ g_bus_unwatch_proxy (guint watcher_id) { Client *client; + g_return_if_fail (watcher_id > 0); + client = NULL; G_LOCK (lock); -- cgit v1.2.3