remove upstreamed patch
This commit is contained in:
parent
2166a47e0a
commit
8692e6d9e5
@ -1,253 +0,0 @@
|
|||||||
From ed009b4d497e748f43887e91f4f777c6cdb5e43d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Debarshi Ray <debarshir@gnome.org>
|
|
||||||
Date: Tue, 20 Jan 2015 18:40:18 +0100
|
|
||||||
Subject: [PATCH 1/2] Make the ref / unref pairs more obvious
|
|
||||||
|
|
||||||
This makes the code more readable and robust against refactorings.
|
|
||||||
|
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=741257
|
|
||||||
---
|
|
||||||
libgupnp/gupnp-network-manager.c | 10 ++++------
|
|
||||||
1 file changed, 4 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libgupnp/gupnp-network-manager.c b/libgupnp/gupnp-network-manager.c
|
|
||||||
index f9c304e7f5df..0d53291b0479 100644
|
|
||||||
--- a/libgupnp/gupnp-network-manager.c
|
|
||||||
+++ b/libgupnp/gupnp-network-manager.c
|
|
||||||
@@ -163,7 +163,6 @@ nm_device_unref (NMDevice *nm_device)
|
|
||||||
g_object_unref (nm_device->context);
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_object_unref (nm_device->proxy);
|
|
||||||
g_object_unref (nm_device->manager);
|
|
||||||
|
|
||||||
g_slice_free (NMDevice, nm_device);
|
|
||||||
@@ -379,7 +378,7 @@ use_new_device (GUPnPNetworkManager *manager,
|
|
||||||
GVariant *value;
|
|
||||||
|
|
||||||
manager->priv->nm_devices = g_list_append (manager->priv->nm_devices,
|
|
||||||
- nm_device);
|
|
||||||
+ nm_device_ref (nm_device));
|
|
||||||
|
|
||||||
g_signal_connect (nm_device->proxy,
|
|
||||||
"g-signal",
|
|
||||||
@@ -433,7 +432,7 @@ device_proxy_new_cb (GObject *source_object,
|
|
||||||
gpointer user_data) {
|
|
||||||
GUPnPNetworkManager *manager;
|
|
||||||
GDBusProxy *device_proxy;
|
|
||||||
- NMDevice *nm_device;
|
|
||||||
+ NMDevice *nm_device = NULL;
|
|
||||||
NMDeviceType type;
|
|
||||||
GVariant *value;
|
|
||||||
GError *error;
|
|
||||||
@@ -451,14 +450,11 @@ device_proxy_new_cb (GObject *source_object,
|
|
||||||
|
|
||||||
value = g_dbus_proxy_get_cached_property (device_proxy, "DeviceType");
|
|
||||||
if (G_UNLIKELY (value == NULL)) {
|
|
||||||
- g_object_unref (device_proxy);
|
|
||||||
-
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (G_UNLIKELY (!g_variant_is_of_type (value, G_VARIANT_TYPE_UINT32))) {
|
|
||||||
g_variant_unref (value);
|
|
||||||
- g_object_unref (device_proxy);
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
@@ -485,6 +481,8 @@ device_proxy_new_cb (GObject *source_object,
|
|
||||||
use_new_device (manager, nm_device);
|
|
||||||
|
|
||||||
done:
|
|
||||||
+ g_clear_pointer (&nm_device, (GDestroyNotify) nm_device_unref);
|
|
||||||
+ g_clear_object (&device_proxy);
|
|
||||||
g_object_unref (manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.5.0
|
|
||||||
|
|
||||||
|
|
||||||
From d2e0dc2a8fdb104950f01f153ff60eb663de7a88 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Debarshi Ray <debarshir@gnome.org>
|
|
||||||
Date: Tue, 20 Jan 2015 18:40:38 +0100
|
|
||||||
Subject: [PATCH 2/2] Use the GCancellable to cancel pending operations during
|
|
||||||
destruction
|
|
||||||
|
|
||||||
Relying on references to stay alive across idle and asynchronous calls
|
|
||||||
confuses users because the object stays alive even after the user has
|
|
||||||
dropped the only reference known to it. This can lead to crashes due
|
|
||||||
to invalid memory access if the object or its children emit signals
|
|
||||||
after the user has itself been destructed.
|
|
||||||
|
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=741257
|
|
||||||
---
|
|
||||||
libgupnp/gupnp-network-manager.c | 48 ++++++++++++++++++++++------------------
|
|
||||||
1 file changed, 26 insertions(+), 22 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libgupnp/gupnp-network-manager.c b/libgupnp/gupnp-network-manager.c
|
|
||||||
index 0d53291b0479..1111268e3db6 100644
|
|
||||||
--- a/libgupnp/gupnp-network-manager.c
|
|
||||||
+++ b/libgupnp/gupnp-network-manager.c
|
|
||||||
@@ -129,7 +129,7 @@ nm_device_new (GUPnPNetworkManager *manager,
|
|
||||||
nm_device = g_slice_new0 (NMDevice);
|
|
||||||
|
|
||||||
g_atomic_int_set (&nm_device->ref_count, 1);
|
|
||||||
- nm_device->manager = g_object_ref (manager);
|
|
||||||
+ nm_device->manager = manager;
|
|
||||||
nm_device->proxy = g_object_ref (device_proxy);
|
|
||||||
|
|
||||||
return nm_device;
|
|
||||||
@@ -155,7 +155,7 @@ nm_device_unref (NMDevice *nm_device)
|
|
||||||
if (nm_device->ap_proxy != NULL)
|
|
||||||
g_object_unref (nm_device->ap_proxy);
|
|
||||||
|
|
||||||
- if (nm_device->context != NULL) {
|
|
||||||
+ if (nm_device->manager != NULL && nm_device->context != NULL) {
|
|
||||||
g_signal_emit_by_name (nm_device->manager,
|
|
||||||
"context-unavailable",
|
|
||||||
nm_device->context);
|
|
||||||
@@ -163,8 +163,6 @@ nm_device_unref (NMDevice *nm_device)
|
|
||||||
g_object_unref (nm_device->context);
|
|
||||||
}
|
|
||||||
|
|
||||||
- g_object_unref (nm_device->manager);
|
|
||||||
-
|
|
||||||
g_slice_free (NMDevice, nm_device);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -279,7 +277,10 @@ ap_proxy_new_cb (GObject *source_object,
|
|
||||||
|
|
||||||
nm_device->ap_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
|
|
||||||
if (G_UNLIKELY (error != NULL)) {
|
|
||||||
- g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
|
||||||
+ g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
+ else
|
|
||||||
+ nm_device->manager = NULL;
|
|
||||||
g_error_free (error);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
@@ -415,7 +416,10 @@ wifi_proxy_new_cb (GObject *source_object,
|
|
||||||
|
|
||||||
nm_device->wifi_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
|
|
||||||
if (G_UNLIKELY (error != NULL)) {
|
|
||||||
- g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
|
||||||
+ g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
+ else
|
|
||||||
+ nm_device->manager = NULL;
|
|
||||||
g_error_free (error);
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
@@ -437,17 +441,19 @@ device_proxy_new_cb (GObject *source_object,
|
|
||||||
GVariant *value;
|
|
||||||
GError *error;
|
|
||||||
|
|
||||||
- manager = GUPNP_NETWORK_MANAGER (user_data);
|
|
||||||
error = NULL;
|
|
||||||
|
|
||||||
device_proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
|
|
||||||
if (G_UNLIKELY (error != NULL)) {
|
|
||||||
- g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
|
||||||
+ g_message ("Failed to create D-Bus proxy: %s", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ manager = GUPNP_NETWORK_MANAGER (user_data);
|
|
||||||
+
|
|
||||||
value = g_dbus_proxy_get_cached_property (device_proxy, "DeviceType");
|
|
||||||
if (G_UNLIKELY (value == NULL)) {
|
|
||||||
goto done;
|
|
||||||
@@ -483,7 +489,6 @@ device_proxy_new_cb (GObject *source_object,
|
|
||||||
done:
|
|
||||||
g_clear_pointer (&nm_device, (GDestroyNotify) nm_device_unref);
|
|
||||||
g_clear_object (&device_proxy);
|
|
||||||
- g_object_unref (manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
@@ -525,7 +530,7 @@ on_manager_signal (GDBusProxy *proxy,
|
|
||||||
DEVICE_INTERFACE,
|
|
||||||
manager->priv->cancellable,
|
|
||||||
device_proxy_new_cb,
|
|
||||||
- g_object_ref (manager));
|
|
||||||
+ manager);
|
|
||||||
g_free (device_path);
|
|
||||||
} else if (g_strcmp0 (signal_name, "DeviceRemoved") == 0) {
|
|
||||||
GList *device_node;
|
|
||||||
@@ -568,19 +573,20 @@ get_devices_cb (GObject *source_object,
|
|
||||||
char* device_path;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
- manager = GUPNP_NETWORK_MANAGER (user_data);
|
|
||||||
-
|
|
||||||
ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object),
|
|
||||||
res,
|
|
||||||
&error);
|
|
||||||
if (error != NULL) {
|
|
||||||
- g_warning ("Error fetching list of devices: %s",
|
|
||||||
- error->message);
|
|
||||||
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
|
||||||
+ g_warning ("Error fetching list of devices: %s",
|
|
||||||
+ error->message);
|
|
||||||
|
|
||||||
g_error_free (error);
|
|
||||||
- goto done;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ manager = GUPNP_NETWORK_MANAGER (user_data);
|
|
||||||
+
|
|
||||||
g_variant_get_child (ret, 0, "ao", &device_iter);
|
|
||||||
while (g_variant_iter_loop (device_iter, "o", &device_path))
|
|
||||||
g_dbus_proxy_new_for_bus (G_BUS_TYPE_SYSTEM,
|
|
||||||
@@ -591,13 +597,10 @@ get_devices_cb (GObject *source_object,
|
|
||||||
DEVICE_INTERFACE,
|
|
||||||
manager->priv->cancellable,
|
|
||||||
device_proxy_new_cb,
|
|
||||||
- g_object_ref (user_data));
|
|
||||||
+ user_data);
|
|
||||||
g_variant_iter_free (device_iter);
|
|
||||||
|
|
||||||
g_variant_unref (ret);
|
|
||||||
-
|
|
||||||
-done:
|
|
||||||
- g_object_unref (manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -611,8 +614,8 @@ schedule_loopback_context_creation (GUPnPNetworkManager *manager)
|
|
||||||
g_main_context_get_thread_default ());
|
|
||||||
g_source_set_callback (manager->priv->idle_context_creation_src,
|
|
||||||
create_loopback_context,
|
|
||||||
- g_object_ref (manager),
|
|
||||||
- (GDestroyNotify) g_object_unref);
|
|
||||||
+ manager,
|
|
||||||
+ NULL);
|
|
||||||
g_source_unref (manager->priv->idle_context_creation_src);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -655,7 +658,7 @@ init_network_manager (GUPnPNetworkManager *manager)
|
|
||||||
-1,
|
|
||||||
priv->cancellable,
|
|
||||||
get_devices_cb,
|
|
||||||
- g_object_ref (manager));
|
|
||||||
+ manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -715,6 +718,7 @@ gupnp_network_manager_dispose (GObject *object)
|
|
||||||
g_list_free_full (priv->nm_devices, (GDestroyNotify) nm_device_unref);
|
|
||||||
|
|
||||||
if (priv->cancellable != NULL) {
|
|
||||||
+ g_cancellable_cancel (priv->cancellable);
|
|
||||||
g_object_unref (priv->cancellable);
|
|
||||||
priv->cancellable = NULL;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.5.0
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user