diff options
Diffstat (limited to 'src/nm-activation-request.c')
-rw-r--r-- | src/nm-activation-request.c | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/src/nm-activation-request.c b/src/nm-activation-request.c index 2d12b760e3..90590838c0 100644 --- a/src/nm-activation-request.c +++ b/src/nm-activation-request.c @@ -96,12 +96,34 @@ get_secrets_cb (NMSettingsConnection *connection, NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (info->self); g_return_if_fail (info->call_id_s == call_id_s); + g_return_if_fail (g_slist_find (priv->secrets_calls, info)); + priv->secrets_calls = g_slist_remove (priv->secrets_calls, info); - info->callback (info->self, info, NM_CONNECTION (connection), error, info->callback_data); + if (info->callback) + info->callback (info->self, info, NM_CONNECTION (connection), error, info->callback_data); g_free (info); } +/** + * nm_act_request_get_secrets: + * @self: + * @setting_name: + * @flags: + * @hint: + * @callback: + * @callback_data: + * + * Asnychronously starts the request for secrets. This function cannot + * fail. + * + * The return call-id can be used to cancel the request. You are + * only allowed to cancel a still pending operation (once). + * The callback will always be invoked once, even for canceling + * or disposing of NMActRequest. + * + * Returns: a call-id. + */ NMActRequestGetSecretsCallId nm_act_request_get_secrets (NMActRequest *self, const char *setting_name, @@ -152,7 +174,6 @@ nm_act_request_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId { NMActRequestPrivate *priv; NMConnection *connection; - GSList *iter; g_return_if_fail (self); g_return_if_fail (NM_IS_ACT_REQUEST (self)); @@ -160,21 +181,11 @@ nm_act_request_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId priv = NM_ACT_REQUEST_GET_PRIVATE (self); - for (iter = priv->secrets_calls; iter; iter = g_slist_next (iter)) { - GetSecretsInfo *info = iter->data; - - /* Remove the matching info */ - if (info == call_id) { - priv->secrets_calls = g_slist_remove_link (priv->secrets_calls, iter); - g_slist_free (iter); + if (g_slist_find (priv->secrets_calls, call_id)) + g_return_if_reached (); - connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (self)); - nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (connection), info->call_id_s); - g_free (info); - return; - } - } - g_return_if_reached (); + connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (self)); + nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (connection), call_id->call_id_s); } /********************************************************************/ @@ -434,7 +445,6 @@ dispose (GObject *object) { NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (object); NMConnection *connection; - GSList *iter; /* Clear any share rules */ if (priv->share_rules) { @@ -444,14 +454,13 @@ dispose (GObject *object) /* Kill any in-progress secrets requests */ connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (object)); - for (iter = priv->secrets_calls; connection && iter; iter = g_slist_next (iter)) { - GetSecretsInfo *info = iter->data; + while (priv->secrets_calls) { + GetSecretsInfo *info = priv->secrets_calls->data; nm_settings_connection_cancel_secrets (NM_SETTINGS_CONNECTION (connection), info->call_id_s); - g_free (info); + + g_return_if_fail (!priv->secrets_calls || info != priv->secrets_calls->data); } - g_slist_free (priv->secrets_calls); - priv->secrets_calls = NULL; G_OBJECT_CLASS (nm_act_request_parent_class)->dispose (object); } |