summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-06-28 18:42:04 +0200
committerThomas Haller <thaller@redhat.com>2017-06-29 09:56:32 +0200
commit45d61470981b998865acd5901987a4a4ef8c9320 (patch)
treeccebb90c823ed2a7b24581464bac86a2904890ec
parent7cd4711e3170d5913955ef3c3b3a2a6fd37058f9 (diff)
downloadNetworkManager-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.c37
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