diff options
author | Thomas Haller <thaller@redhat.com> | 2017-06-28 18:42:04 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-06-29 09:56:32 +0200 |
commit | 45d61470981b998865acd5901987a4a4ef8c9320 (patch) | |
tree | ccebb90c823ed2a7b24581464bac86a2904890ec | |
parent | 7cd4711e3170d5913955ef3c3b3a2a6fd37058f9 (diff) | |
download | NetworkManager-45d61470981b998865acd5901987a4a4ef8c9320.tar.gz |
Revert "libnm: don't use async constructor for GDBusObjectManager"
Strangely, this breaks
systemctl restart NetworkManager
nmcli connection up "$NAME"
It seems that with this change, libnm misses some events from D-Bus.
It looks like there is something seriously broken. Before fixing it,
revert the previous state.
https://bugzilla.redhat.com/show_bug.cgi?id=1450075
This reverts commit 529d620a59f42e3f06bd4e7de5c817f175803c0d.
-rw-r--r-- | libnm/nm-client.c | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/libnm/nm-client.c b/libnm/nm-client.c index 774f5f6ba0..1349127718 100644 --- a/libnm/nm-client.c +++ b/libnm/nm-client.c @@ -2321,7 +2321,6 @@ typedef struct { GCancellable *cancellable; GSimpleAsyncResult *result; int pending_init; - guint idle_init_id; } NMClientInitData; static void @@ -2330,7 +2329,6 @@ init_async_complete (NMClientInitData *init_data) g_simple_async_result_complete (init_data->result); g_object_unref (init_data->result); g_clear_object (&init_data->cancellable); - nm_clear_g_source (&init_data->idle_init_id); g_slice_free (NMClientInitData, init_data); } @@ -2413,8 +2411,8 @@ new_object_manager (GObject *source_object, GAsyncResult *res, gpointer user_dat g_clear_object (&priv->new_object_manager_cancellable); } -static gboolean -got_object_manager (gpointer user_data) +static void +got_object_manager (GObject *object, GAsyncResult *result, gpointer user_data) { NMClientInitData *init_data = user_data; NMClient *client; @@ -2424,26 +2422,11 @@ got_object_manager (gpointer user_data) GError *error = NULL; GDBusObjectManager *object_manager; - init_data->idle_init_id = 0; - - if (g_cancellable_set_error_if_cancelled (init_data->cancellable, - &error)) { - g_simple_async_result_take_error (init_data->result, error); - init_async_complete (init_data); - return G_SOURCE_REMOVE; - } - - object_manager = g_dbus_object_manager_client_new_for_bus_sync (_nm_dbus_bus_type (), - G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START, - "org.freedesktop.NetworkManager", - "/org/freedesktop", - proxy_type, NULL, NULL, - init_data->cancellable, - &error); + object_manager = g_dbus_object_manager_client_new_for_bus_finish (result, &error); if (object_manager == NULL) { g_simple_async_result_take_error (init_data->result, error); init_async_complete (init_data); - return G_SOURCE_REMOVE; + return; } client = init_data->client; @@ -2456,7 +2439,7 @@ got_object_manager (gpointer user_data) if (!objects_created (client, priv->object_manager, &error)) { g_simple_async_result_take_error (init_data->result, error); init_async_complete (init_data); - return G_SOURCE_REMOVE; + return; } objects = g_dbus_object_manager_get_objects (priv->object_manager); @@ -2479,7 +2462,6 @@ got_object_manager (gpointer user_data) g_signal_connect (priv->object_manager, "notify::name-owner", G_CALLBACK (name_owner_changed), client); - return G_SOURCE_REMOVE; } static void @@ -2497,7 +2479,14 @@ prepare_object_manager (NMClient *client, user_data, init_async); g_simple_async_result_set_op_res_gboolean (init_data->result, TRUE); - init_data->idle_init_id = g_idle_add (got_object_manager, init_data); + g_dbus_object_manager_client_new_for_bus (_nm_dbus_bus_type (), + G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START, + "org.freedesktop.NetworkManager", + "/org/freedesktop", + proxy_type, NULL, NULL, + init_data->cancellable, + got_object_manager, + init_data); } static void |