diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2016-10-13 16:28:32 +0200 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2016-10-13 16:28:32 +0200 |
commit | d5b3bf8ee760c7cda5daf762fe14bbe734d5d1a1 (patch) | |
tree | da6312c58ac3405a898792691c008d0b90ee51f5 | |
parent | cfe74bc01a06b598a5bef3d85409e09ca85c0081 (diff) | |
parent | 10fbc47d320164c11e3532aef033997d71e14eed (diff) | |
download | NetworkManager-d5b3bf8ee760c7cda5daf762fe14bbe734d5d1a1.tar.gz |
libnm: merge branch 'bg/libnm-activation-stuck-rh1367752'
https://bugzilla.redhat.com/show_bug.cgi?id=1367752
(cherry picked from commit aae26ebed31a8195f8b11b015ae77a45c753e5d3)
-rw-r--r-- | clients/cli/connections.c | 4 | ||||
-rw-r--r-- | libnm/nm-object.c | 23 |
2 files changed, 22 insertions, 5 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index fe367a3f4a..36c41ace8a 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -2179,6 +2179,10 @@ active_connection_state_cb (NMActiveConnection *active, GParamSpec *pspec, Activ g_print (_("Connection successfully activated (D-Bus active path: %s)\n"), nm_object_get_path (NM_OBJECT (active))); activate_connection_info_finish (info); + } else if (state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED) { + g_string_printf (nmc->return_text, _("Error: Connection activation failed.")); + nmc->return_value = NMC_RESULT_ERROR_CON_ACTIVATION; + activate_connection_info_finish (info); } else if (state == NM_ACTIVE_CONNECTION_STATE_ACTIVATING) { /* activating master connection does not automatically activate any slaves, so their * active connection state will not progress beyond ACTIVATING state. diff --git a/libnm/nm-object.c b/libnm/nm-object.c index 3b41041e24..337ca69862 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -488,14 +488,29 @@ create_async_complete (GObject *object, NMObjectTypeAsyncData *async_data) static void create_async_inited (GObject *object, GAsyncResult *result, gpointer user_data) { + NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); + NMObjectPrivate *odata_priv; NMObjectTypeAsyncData *async_data = user_data; GError *error = NULL; + ObjectCreatedData *odata; - NM_OBJECT_GET_PRIVATE (object)->inited = TRUE; + priv->inited = TRUE; if (!g_async_initable_init_finish (G_ASYNC_INITABLE (object), result, &error)) { dbgmsg ("Could not create object for %s: %s", nm_object_get_path (NM_OBJECT (object)), error->message); + + while (priv->waiters) { + odata = priv->waiters->data; + odata_priv = NM_OBJECT_GET_PRIVATE (odata->self); + + priv->waiters = g_slist_remove (priv->waiters, odata); + if (!odata_priv->reload_error) + odata_priv->reload_error = g_error_copy (error); + odata_priv->reload_remaining--; + reload_complete (odata->self, FALSE); + } + g_error_free (error); g_clear_object (&object); } @@ -503,15 +518,13 @@ create_async_inited (GObject *object, GAsyncResult *result, gpointer user_data) create_async_complete (object, async_data); if (object) { - NMObjectPrivate *priv = NM_OBJECT_GET_PRIVATE (object); - /* There are some object properties whose creation couldn't proceed * because it depended on this object. */ while (priv->waiters) { - ObjectCreatedData *odata = priv->waiters->data; - + odata = priv->waiters->data; priv->waiters = g_slist_remove (priv->waiters, odata); object_property_maybe_complete (odata); + } } } |