summaryrefslogtreecommitdiff
path: root/libnm-glib
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2018-03-05 16:02:24 +0100
committerThomas Haller <thaller@redhat.com>2018-03-08 14:52:45 +0100
commit60093105b97d44344400b9cf0e6e63993b27ce84 (patch)
treeab7cbe276d8fc3dcc12ed677294fa0c85396f94f /libnm-glib
parent8c285675fe46c1fa4eefd30e619d0b245c969344 (diff)
Add calls to g_simple_async_result_set_check_cancellable
If an operation is cancelled through the GCancellable, then the idiom is that the operation is always cancelled, even if it has finished successfully. To ensure this is the case, add calls to g_simple_async_result_set_check_cancellable everywhere. Without this, e.g. gnome-control-center will crash when switching away from the power panel quickly, as the NMClient creation finishes asynchronously and g-c-c assume that G_IO_ERROR_CANCELLED is returned to ensure it doesn't access the now invalid user_data parameter. https://bugzilla.gnome.org/show_bug.cgi?id=794088
Diffstat (limited to 'libnm-glib')
-rw-r--r--libnm-glib/nm-client.c6
-rw-r--r--libnm-glib/nm-object.c2
-rw-r--r--libnm-glib/nm-remote-connection.c2
-rw-r--r--libnm-glib/nm-remote-settings.c4
4 files changed, 14 insertions, 0 deletions
diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c
index 183cdc933..ad9069836 100644
--- a/libnm-glib/nm-client.c
+++ b/libnm-glib/nm-client.c
@@ -1612,6 +1612,8 @@ nm_client_check_connectivity_async (NMClient *client,
simple = g_simple_async_result_new (G_OBJECT (client), callback, user_data,
nm_client_check_connectivity_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
g_simple_async_result_set_op_res_gpointer (simple, ccd, (GDestroyNotify) check_connectivity_data_free);
if (cancellable) {
@@ -1738,6 +1740,8 @@ nm_client_new_async (GCancellable *cancellable,
}
simple = g_simple_async_result_new (NULL, callback, user_data, nm_client_new_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
g_async_initable_init_async (G_ASYNC_INITABLE (client), G_PRIORITY_DEFAULT,
cancellable, client_inited, simple);
}
@@ -2001,6 +2005,8 @@ init_async (GAsyncInitable *initable, int io_priority,
init_data->client = NM_CLIENT (initable);
init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
user_data, init_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (init_data->result, cancellable);
g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE);
/* Check if NM is running */
diff --git a/libnm-glib/nm-object.c b/libnm-glib/nm-object.c
index 2e07ff6d1..d3f8c830e 100644
--- a/libnm-glib/nm-object.c
+++ b/libnm-glib/nm-object.c
@@ -303,6 +303,8 @@ init_async (GAsyncInitable *initable, int io_priority,
GSimpleAsyncResult *simple;
simple = g_simple_async_result_new (G_OBJECT (initable), callback, user_data, init_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
/* Check if NM is running */
dbus_g_proxy_begin_call (priv->bus_proxy, "NameHasOwner",
diff --git a/libnm-glib/nm-remote-connection.c b/libnm-glib/nm-remote-connection.c
index 7e60ea953..820f9e5ca 100644
--- a/libnm-glib/nm-remote-connection.c
+++ b/libnm-glib/nm-remote-connection.c
@@ -713,6 +713,8 @@ init_async (GAsyncInitable *initable, int io_priority,
init_data->connection = NM_REMOTE_CONNECTION (initable);
init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
user_data, init_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (init_data->result, cancellable);
dbus_g_proxy_begin_call (priv->proxy, "GetSettings",
init_get_settings_cb, init_data, NULL,
diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c
index 3f2c50f24..be6b7ee3b 100644
--- a/libnm-glib/nm-remote-settings.c
+++ b/libnm-glib/nm-remote-settings.c
@@ -1115,6 +1115,8 @@ nm_remote_settings_new_async (DBusGConnection *bus, GCancellable *cancellable,
GSimpleAsyncResult *simple;
simple = g_simple_async_result_new (NULL, callback, user_data, nm_remote_settings_new_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (simple, cancellable);
self = g_object_new (NM_TYPE_REMOTE_SETTINGS,
NM_REMOTE_SETTINGS_BUS, bus,
@@ -1367,6 +1369,8 @@ init_async (GAsyncInitable *initable, int io_priority,
init_data->settings = NM_REMOTE_SETTINGS (initable);
init_data->result = g_simple_async_result_new (G_OBJECT (initable), callback,
user_data, init_async);
+ if (cancellable)
+ g_simple_async_result_set_check_cancellable (init_data->result, cancellable);
/* Check if NM is running */
dbus_g_proxy_begin_call (priv->dbus_proxy, "NameHasOwner",