about summary refs log tree commit diff
path: root/src/nm-act-request.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2017-12-12 15:53:07 +0100
committerMichael Biebl <biebl@debian.org>2017-12-12 15:53:07 +0100
commitafcd268ea7b1149fbfb66bce4eca659b675da0a2 (patch)
treec3fca2203ad17434daf3ccf576582bd66aa41ab2 /src/nm-act-request.c
parent417f6015c3dc8c47cf27daa59f64e0e36c521b9c (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.c109
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) {