Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
import 0001-GDBusObjectManagerClient-keep-the-manager-alive-whil.patc…
…h from merproject
- Loading branch information
Islam Amer
committed
Mar 18, 2014
1 parent
4ea0e12
commit 28b4488
Showing
1 changed file
with
87 additions
and
0 deletions.
There are no files selected for viewing
87 changes: 87 additions & 0 deletions
87
rpm/0001-GDBusObjectManagerClient-keep-the-manager-alive-whil.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
From 1300108e0c50e70d5414c195649ad41419074e1a Mon Sep 17 00:00:00 2001 | ||
From: Rui Matos <tiagomatos@gmail.com> | ||
Date: Wed, 27 Nov 2013 14:32:05 +0100 | ||
Subject: [PATCH] GDBusObjectManagerClient: keep the manager alive while firing | ||
signals | ||
|
||
Handlers for the signals we emit might unref the object manager. Make | ||
sure we keep it alive until we are done with it. | ||
|
||
https://bugzilla.gnome.org/show_bug.cgi?id=719402 | ||
--- | ||
gio/gdbusobjectmanagerclient.c | 9 ++++++++- | ||
1 file changed, 8 insertions(+), 1 deletion(-) | ||
|
||
diff --git a/gio/gdbusobjectmanagerclient.c b/gio/gdbusobjectmanagerclient.c | ||
index d9ccf71..f33ca21 100644 | ||
--- a/gio/gdbusobjectmanagerclient.c | ||
+++ b/gio/gdbusobjectmanagerclient.c | ||
@@ -1006,6 +1006,7 @@ signal_cb (GDBusConnection *connection, | ||
|
||
//g_debug ("yay, signal_cb %s %s: %s\n", signal_name, object_path, g_variant_print (parameters, TRUE)); | ||
|
||
+ g_object_ref (manager); | ||
if (g_strcmp0 (interface_name, "org.freedesktop.DBus.Properties") == 0) | ||
{ | ||
if (g_strcmp0 (signal_name, "PropertiesChanged") == 0) | ||
@@ -1087,6 +1088,7 @@ signal_cb (GDBusConnection *connection, | ||
g_object_unref (interface); | ||
} | ||
} | ||
+ g_object_unref (manager); | ||
|
||
out: | ||
g_clear_object (&object_proxy); | ||
@@ -1243,6 +1245,7 @@ on_notify_g_name_owner (GObject *object, | ||
new_name_owner = g_dbus_proxy_get_name_owner (manager->priv->control_proxy); | ||
manager->priv->name_owner = NULL; | ||
|
||
+ g_object_ref (manager); | ||
if (g_strcmp0 (old_name_owner, new_name_owner) != 0) | ||
{ | ||
GList *l; | ||
@@ -1319,6 +1322,7 @@ on_notify_g_name_owner (GObject *object, | ||
|
||
} | ||
g_free (old_name_owner); | ||
+ g_object_unref (manager); | ||
} | ||
|
||
static gboolean | ||
@@ -1543,6 +1547,7 @@ add_interfaces (GDBusObjectManagerClient *manager, | ||
g_mutex_unlock (&manager->priv->lock); | ||
|
||
/* now that we don't hold the lock any more, emit signals */ | ||
+ g_object_ref (manager); | ||
for (l = interface_added_signals; l != NULL; l = l->next) | ||
{ | ||
interface_proxy = G_DBUS_PROXY (l->data); | ||
@@ -1558,8 +1563,8 @@ add_interfaces (GDBusObjectManagerClient *manager, | ||
op); | ||
g_signal_emit_by_name (manager, "object-added", op); | ||
} | ||
+ g_object_unref (manager); | ||
g_object_unref (op); | ||
- | ||
} | ||
|
||
static void | ||
@@ -1592,6 +1597,7 @@ remove_interfaces (GDBusObjectManagerClient *manager, | ||
num_interfaces_to_remove = g_strv_length ((gchar **) interface_names); | ||
|
||
/* see if we are going to completety remove the object */ | ||
+ g_object_ref (manager); | ||
if (num_interfaces_to_remove == num_interfaces) | ||
{ | ||
g_object_ref (op); | ||
@@ -1617,6 +1623,7 @@ remove_interfaces (GDBusObjectManagerClient *manager, | ||
} | ||
g_object_unref (op); | ||
} | ||
+ g_object_unref (manager); | ||
out: | ||
; | ||
} | ||
-- | ||
1.8.3.1 | ||
|