summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2010-04-29 18:06:42 -0400
committerDavid Zeuthen <davidz@redhat.com>2010-04-29 18:06:42 -0400
commitd9fcb3711e0d88d9c0d34144b837d6aecf678b6d (patch)
tree95b50a9c2463da85c8ec5767e0a34c65781c49cb
parentbbfca72e7b9d65aa110ab8368397ce446416412d (diff)
Nuke ref_count and add return_if_fail guards
Also allow NULL handlers
-rw-r--r--gdbus/gdbusproxywatching.c50
1 files 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 <glib/gi18n.h>
+#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);