diff options
| author | Michael Biebl <biebl@debian.org> | 2017-12-12 15:53:07 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2017-12-12 15:53:07 +0100 |
| commit | afcd268ea7b1149fbfb66bce4eca659b675da0a2 (patch) | |
| tree | c3fca2203ad17434daf3ccf576582bd66aa41ab2 /src/nm-act-request.c | |
| parent | 417f6015c3dc8c47cf27daa59f64e0e36c521b9c (diff) | |
New upstream version 1.10.2 upstream/1.10.2
Diffstat (limited to 'src/nm-act-request.c')
| -rw-r--r-- | src/nm-act-request.c | 109 |
1 files changed, 52 insertions, 57 deletions
diff --git a/src/nm-act-request.c b/src/nm-act-request.c index 6d8bb065..87070794 100644 --- a/src/nm-act-request.c +++ b/src/nm-act-request.c @@ -28,6 +28,8 @@ #include <sys/wait.h> #include <unistd.h> +#include "nm-utils/c-list.h" + #include "nm-setting-wireless-security.h" #include "nm-setting-8021x.h" #include "devices/nm-device.h" @@ -41,7 +43,7 @@ typedef struct { } ShareRule; typedef struct { - GSList *secrets_calls; + CList call_ids_lst_head; gboolean shared; GSList *share_rules; } NMActRequestPrivate; @@ -90,64 +92,52 @@ nm_act_request_get_applied_connection (NMActRequest *req) /*****************************************************************************/ struct _NMActRequestGetSecretsCallId { + CList call_ids_lst; NMActRequest *self; NMActRequestSecretsFunc callback; gpointer callback_data; - NMSettingsConnectionCallId call_id; + NMSettingsConnectionCallId *call_id; bool has_ref; }; -typedef struct _NMActRequestGetSecretsCallId GetSecretsInfo; - -static GetSecretsInfo * -_get_secrets_info_new (NMActRequest *self, gboolean ref_self, NMActRequestSecretsFunc callback, gpointer callback_data) -{ - GetSecretsInfo *info; - - info = g_slice_new0 (GetSecretsInfo); - info->has_ref = ref_self; - info->self = ref_self ? g_object_ref (self) : self; - info->callback = callback; - info->callback_data = callback_data; - - return info; -} - static void -_get_secrets_info_free (GetSecretsInfo *info) +_get_secrets_call_id_free (NMActRequestGetSecretsCallId *call_id) { - if (info->has_ref) - g_object_unref (info->self); - g_slice_free (GetSecretsInfo, info); + nm_assert (call_id); + nm_assert (!c_list_is_linked (&call_id->call_ids_lst)); + + if (call_id->has_ref) + g_object_unref (call_id->self); + g_slice_free (NMActRequestGetSecretsCallId, call_id); } static void get_secrets_cb (NMSettingsConnection *connection, - NMSettingsConnectionCallId call_id_s, + NMSettingsConnectionCallId *call_id_s, const char *agent_username, const char *setting_name, GError *error, gpointer user_data) { - GetSecretsInfo *info = user_data; + NMActRequestGetSecretsCallId *call_id = user_data; NMActRequestPrivate *priv; - g_return_if_fail (info && info->call_id == call_id_s); - g_return_if_fail (NM_IS_ACT_REQUEST (info->self)); + g_return_if_fail (call_id && call_id->call_id == call_id_s); + g_return_if_fail (NM_IS_ACT_REQUEST (call_id->self)); if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) return; - priv = NM_ACT_REQUEST_GET_PRIVATE (info->self); + priv = NM_ACT_REQUEST_GET_PRIVATE (call_id->self); - g_return_if_fail (g_slist_find (priv->secrets_calls, info)); + nm_assert (c_list_contains (&priv->call_ids_lst_head, &call_id->call_ids_lst)); - priv->secrets_calls = g_slist_remove (priv->secrets_calls, info); + c_list_unlink (&call_id->call_ids_lst); - if (info->callback) - info->callback (info->self, info, connection, error, info->callback_data); + if (call_id->callback) + call_id->callback (call_id->self, call_id, connection, error, call_id->callback_data); - _get_secrets_info_free (info); + _get_secrets_call_id_free (call_id); } /** @@ -171,7 +161,7 @@ get_secrets_cb (NMSettingsConnection *connection, * * Returns: a call-id. */ -NMActRequestGetSecretsCallId +NMActRequestGetSecretsCallId * nm_act_request_get_secrets (NMActRequest *self, gboolean ref_self, const char *setting_name, @@ -181,8 +171,8 @@ nm_act_request_get_secrets (NMActRequest *self, gpointer callback_data) { NMActRequestPrivate *priv; - GetSecretsInfo *info; - NMSettingsConnectionCallId call_id_s; + NMActRequestGetSecretsCallId *call_id; + NMSettingsConnectionCallId *call_id_s; NMSettingsConnection *settings_connection; NMConnection *applied_connection; const char *hints[2] = { hint, NULL }; @@ -194,9 +184,12 @@ nm_act_request_get_secrets (NMActRequest *self, settings_connection = nm_act_request_get_settings_connection (self); applied_connection = nm_act_request_get_applied_connection (self); - info = _get_secrets_info_new (self, ref_self, callback, callback_data); - - priv->secrets_calls = g_slist_append (priv->secrets_calls, info); + call_id = g_slice_new0 (NMActRequestGetSecretsCallId); + call_id->has_ref = ref_self; + call_id->self = ref_self ? g_object_ref (self) : self; + call_id->callback = callback; + call_id->callback_data = callback_data; + c_list_link_tail (&priv->call_ids_lst_head, &call_id->call_ids_lst); if (nm_active_connection_get_user_requested (NM_ACTIVE_CONNECTION (self))) flags |= NM_SECRET_AGENT_GET_SECRETS_FLAG_USER_REQUESTED; @@ -208,32 +201,32 @@ nm_act_request_get_secrets (NMActRequest *self, flags, hints, get_secrets_cb, - info); - info->call_id = call_id_s; + call_id); + call_id->call_id = call_id_s; g_return_val_if_fail (call_id_s, NULL); - return info; + return call_id; } static void -_do_cancel_secrets (NMActRequest *self, GetSecretsInfo *info, gboolean is_disposing) +_do_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId *call_id, gboolean is_disposing) { NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (self); - nm_assert (info && info->self == self); - nm_assert (g_slist_find (priv->secrets_calls, info)); + nm_assert (call_id && call_id->self == self); + nm_assert (c_list_contains (&priv->call_ids_lst_head, &call_id->call_ids_lst)); - priv->secrets_calls = g_slist_remove (priv->secrets_calls, info); + c_list_unlink (&call_id->call_ids_lst); - nm_settings_connection_cancel_secrets (nm_act_request_get_settings_connection (self), info->call_id); + nm_settings_connection_cancel_secrets (nm_act_request_get_settings_connection (self), call_id->call_id); - if (info->callback) { + if (call_id->callback) { gs_free_error GError *error = NULL; nm_utils_error_set_cancelled (&error, is_disposing, "NMActRequest"); - info->callback (self, info, NULL, error, info->callback_data); + call_id->callback (self, call_id, NULL, error, call_id->callback_data); } - _get_secrets_info_free (info); + _get_secrets_call_id_free (call_id); } /** @@ -247,7 +240,7 @@ _do_cancel_secrets (NMActRequest *self, GetSecretsInfo *info, gboolean is_dispos * synchronously. */ void -nm_act_request_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId call_id) +nm_act_request_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId *call_id) { NMActRequestPrivate *priv; @@ -264,7 +257,7 @@ nm_act_request_cancel_secrets (NMActRequest *self, NMActRequestGetSecretsCallId priv = NM_ACT_REQUEST_GET_PRIVATE (self); - if (!g_slist_find (priv->secrets_calls, call_id)) + if (!c_list_is_linked (&call_id->call_ids_lst)) g_return_if_reached (); _do_cancel_secrets (self, call_id, FALSE); @@ -461,10 +454,8 @@ device_state_changed (NMActiveConnection *active, } if ( ac_state == NM_ACTIVE_CONNECTION_STATE_DEACTIVATED - || ac_state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) { - nm_active_connection_set_default (active, FALSE); - nm_active_connection_set_default6 (active, FALSE); - } + || ac_state == NM_ACTIVE_CONNECTION_STATE_UNKNOWN) + nm_active_connection_set_default (active, AF_UNSPEC, FALSE); nm_active_connection_set_state (active, ac_state, ac_state_reason); } @@ -537,6 +528,9 @@ get_property (GObject *object, guint prop_id, static void nm_act_request_init (NMActRequest *req) { + NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (req); + + c_list_init (&priv->call_ids_lst_head); } /** @@ -582,10 +576,11 @@ dispose (GObject *object) { NMActRequest *self = NM_ACT_REQUEST (object); NMActRequestPrivate *priv = NM_ACT_REQUEST_GET_PRIVATE (self); + NMActRequestGetSecretsCallId *call_id, *call_id_safe; /* Kill any in-progress secrets requests */ - while (priv->secrets_calls) - _do_cancel_secrets (self, priv->secrets_calls->data, TRUE); + c_list_for_each_entry_safe (call_id, call_id_safe, &priv->call_ids_lst_head, call_ids_lst) + _do_cancel_secrets (self, call_id, TRUE); /* Clear any share rules */ if (priv->share_rules) { |