summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2014-05-12 15:17:28 +0200
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2014-09-17 14:15:16 +0100
commit75df253e7b8f0e18b34b4f0c7eacfea6b5101619 (patch)
tree0d61ba6a4a80f4a6aa737ddfa94a40756b138bc2
parent6b1eb20092053fa40b548c2cf703ce895ba3c3fc (diff)
downloadtelepathy-glib-75df253e7b8f0e18b34b4f0c7eacfea6b5101619.tar.gz
base-client: don't create skeletons more than once
The client can be registered more than once if user manually unregister it first. We don't want to create different skeleton objects in that case. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77882 Reviewed-by: Simon McVittie
-rw-r--r--telepathy-glib/base-client.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/telepathy-glib/base-client.c b/telepathy-glib/base-client.c
index f4d289422..d7fa99ec5 100644
--- a/telepathy-glib/base-client.c
+++ b/telepathy-glib/base-client.c
@@ -1713,10 +1713,18 @@ observer_skeleton_init (TpBaseClient *self)
GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self);
gboolean delay_approvers, recover;
- self->priv->observer_skeleton = _tp_gdbus_client_observer_skeleton_new ();
+ if (self->priv->observer_skeleton == NULL)
+ {
+ self->priv->observer_skeleton = _tp_gdbus_client_observer_skeleton_new ();
- g_dbus_object_skeleton_add_interface (skel,
- G_DBUS_INTERFACE_SKELETON (self->priv->observer_skeleton));
+ g_dbus_object_skeleton_add_interface (skel,
+ G_DBUS_INTERFACE_SKELETON (self->priv->observer_skeleton));
+
+ /* Method */
+ g_signal_connect_object (self->priv->observer_skeleton,
+ "handle-observe-channel",
+ G_CALLBACK (_tp_base_client_observe_channel), self, 0);
+ }
/* Properties */
delay_approvers = ((self->priv->flags & CLIENT_OBSERVER_DELAYS_APPROVERS)
@@ -1732,11 +1740,6 @@ observer_skeleton_init (TpBaseClient *self)
_tp_gdbus_client_observer_set_observer_channel_filter (
self->priv->observer_skeleton,
g_variant_builder_end (self->priv->observer_filters));
-
- /* Method */
- g_signal_connect_object (self->priv->observer_skeleton,
- "handle-observe-channel", G_CALLBACK (_tp_base_client_observe_channel),
- self, 0);
}
static void
@@ -1907,20 +1910,23 @@ approver_skeleton_init (TpBaseClient *self)
{
GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self);
- self->priv->approver_skeleton = _tp_gdbus_client_approver_skeleton_new ();
+ if (self->priv->approver_skeleton == NULL)
+ {
+ self->priv->approver_skeleton = _tp_gdbus_client_approver_skeleton_new ();
- g_dbus_object_skeleton_add_interface (skel,
- G_DBUS_INTERFACE_SKELETON (self->priv->approver_skeleton));
+ g_dbus_object_skeleton_add_interface (skel,
+ G_DBUS_INTERFACE_SKELETON (self->priv->approver_skeleton));
+
+ /* Method */
+ g_signal_connect_object (self->priv->approver_skeleton,
+ "handle-add-dispatch-operation",
+ G_CALLBACK (_tp_base_client_add_dispatch_operation), self, 0);
+ }
/* Property */
_tp_gdbus_client_approver_set_approver_channel_filter (
self->priv->approver_skeleton,
g_variant_builder_end (self->priv->approver_filters));
-
- /* Method */
- g_signal_connect_object (self->priv->approver_skeleton,
- "handle-add-dispatch-operation",
- G_CALLBACK (_tp_base_client_add_dispatch_operation), self, 0);
}
static void
@@ -2209,10 +2215,18 @@ handler_skeleton_init (TpBaseClient *self)
GDBusObjectSkeleton *skel = G_DBUS_OBJECT_SKELETON (self);
gboolean bypass;
- self->priv->handler_skeleton = _tp_gdbus_client_handler_skeleton_new ();
+ if (self->priv->handler_skeleton == NULL)
+ {
+ self->priv->handler_skeleton = _tp_gdbus_client_handler_skeleton_new ();
- g_dbus_object_skeleton_add_interface (skel,
- G_DBUS_INTERFACE_SKELETON (self->priv->handler_skeleton));
+ g_dbus_object_skeleton_add_interface (skel,
+ G_DBUS_INTERFACE_SKELETON (self->priv->handler_skeleton));
+
+ /* Method */
+ g_signal_connect_object (self->priv->handler_skeleton,
+ "handle-handle-channel", G_CALLBACK (_tp_base_client_handle_channel),
+ self, 0);
+ }
/* Properties */
_tp_gdbus_client_handler_set_handler_channel_filter (
@@ -2228,11 +2242,6 @@ handler_skeleton_init (TpBaseClient *self)
(const gchar * const *) self->priv->handler_caps->pdata);
update_handled_channels_prop (self);
-
- /* Method */
- g_signal_connect_object (self->priv->handler_skeleton,
- "handle-handle-channel", G_CALLBACK (_tp_base_client_handle_channel),
- self, 0);
}
typedef struct