summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorStef Walter <stefw@gnome.org>2015-10-16 22:46:07 +0200
committerStef Walter <stefw@gnome.org>2015-10-17 10:09:38 +0200
commit7840cb97902c952c34831cc63dcba00ececabd0c (patch)
treec5c98bb449868dd91a5e60d67dd480c0c8aee012 /daemon
parent91dfc6a365f3d12e87769680c2dedc2bc1e57b23 (diff)
downloadgnome-keyring-7840cb97902c952c34831cc63dcba00ececabd0c.tar.gz
dbus: Fix object path regression from GDBus port
Previously objects were only explicitly exported on the bus when they were ready. However now due to GDBus handler connections they are exported earlier. Make sure to export a prompt object before something is exported at the same object path to take its place. https://bugzilla.gnome.org/show_bug.cgi?id=756032
Diffstat (limited to 'daemon')
-rw-r--r--daemon/dbus/gkd-secret-create.c1
-rw-r--r--daemon/dbus/gkd-secret-prompt.c10
-rw-r--r--daemon/dbus/gkd-secret-prompt.h3
3 files changed, 14 insertions, 0 deletions
diff --git a/daemon/dbus/gkd-secret-create.c b/daemon/dbus/gkd-secret-create.c
index 0f2b5738..cd5587b7 100644
--- a/daemon/dbus/gkd-secret-create.c
+++ b/daemon/dbus/gkd-secret-create.c
@@ -176,6 +176,7 @@ unlock_or_complete_this_prompt (GkdSecretCreate *self)
g_object_ref (self);
prompt = GKD_SECRET_PROMPT (self);
+ gkd_secret_prompt_unexport (prompt);
unlock = gkd_secret_unlock_new (gkd_secret_prompt_get_service (prompt),
gkd_secret_prompt_get_caller (prompt),
diff --git a/daemon/dbus/gkd-secret-prompt.c b/daemon/dbus/gkd-secret-prompt.c
index 207cc8a6..f0a6d63a 100644
--- a/daemon/dbus/gkd-secret-prompt.c
+++ b/daemon/dbus/gkd-secret-prompt.c
@@ -202,6 +202,16 @@ gkd_secret_prompt_constructed (GObject *obj)
G_CALLBACK (prompt_method_prompt), self);
}
+void
+gkd_secret_prompt_unexport (GkdSecretPrompt *self)
+{
+ g_return_if_fail (self->pv->skeleton != NULL);
+ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (self->pv->skeleton));
+ g_signal_handlers_disconnect_by_func (self->pv->skeleton, prompt_method_dismiss, self);
+ g_signal_handlers_disconnect_by_func (self->pv->skeleton, prompt_method_prompt, self);
+ g_clear_object (&self->pv->skeleton);
+}
+
static void
gkd_secret_prompt_init (GkdSecretPrompt *self)
{
diff --git a/daemon/dbus/gkd-secret-prompt.h b/daemon/dbus/gkd-secret-prompt.h
index 0b52ea08..a133f256 100644
--- a/daemon/dbus/gkd-secret-prompt.h
+++ b/daemon/dbus/gkd-secret-prompt.h
@@ -77,4 +77,7 @@ void gkd_secret_prompt_dismiss (GkdSecretPrompt *
void gkd_secret_prompt_dismiss_with_error (GkdSecretPrompt *self,
GError *error);
+/* Used by derived classes */
+void gkd_secret_prompt_unexport (GkdSecretPrompt *self);
+
#endif /* __GKD_SECRET_PROMPT_H__ */