diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 7807100f5b..3ca86e06a6 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -104,7 +104,7 @@ typedef struct _NMDeviceEthernetPrivate { char * s390_nettype; GHashTable * s390_options; - NMActRequestGetSecretsCallId wired_secrets_id; + NMActRequestGetSecretsCallId *wired_secrets_id; /* PPPoE */ NMPPPManager *ppp_manager; @@ -416,7 +416,7 @@ supplicant_interface_release (NMDeviceEthernet *self) static void wired_secrets_cb (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *connection, GError *error, gpointer user_data) diff --git a/src/devices/nm-device-macsec.c b/src/devices/nm-device-macsec.c index 9558727860..5ef8f93836 100644 --- a/src/devices/nm-device-macsec.c +++ b/src/devices/nm-device-macsec.c @@ -71,7 +71,7 @@ typedef struct { gulong parent_state_id; Supplicant supplicant; guint supplicant_timeout_id; - NMActRequestGetSecretsCallId macsec_secrets_id; + NMActRequestGetSecretsCallId *macsec_secrets_id; } NMDeviceMacsecPrivate; struct _NMDeviceMacsec { @@ -276,7 +276,7 @@ supplicant_iface_assoc_cb (NMSupplicantInterface *iface, static void macsec_secrets_cb (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *connection, GError *error, gpointer user_data) diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index 5e92f47b76..b13ae2c77e 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -107,7 +107,7 @@ typedef struct { NM80211Mode mode; - NMActRequestGetSecretsCallId wifi_secrets_id; + NMActRequestGetSecretsCallId *wifi_secrets_id; guint periodic_source_id; guint link_timeout_id; @@ -1786,7 +1786,7 @@ cleanup_supplicant_failures (NMDeviceWifi *self) static void wifi_secrets_cb (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *connection, GError *error, gpointer user_data) diff --git a/src/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c index 77495b62d8..1c32791f11 100644 --- a/src/devices/wwan/nm-modem.c +++ b/src/devices/wwan/nm-modem.c @@ -94,7 +94,7 @@ typedef struct _NMModemPrivate { NMActRequest *act_request; guint32 secrets_tries; - NMActRequestGetSecretsCallId secrets_id; + NMActRequestGetSecretsCallId *secrets_id; guint32 mm_ip_timeout; @@ -880,7 +880,7 @@ cancel_get_secrets (NMModem *self) static void modem_secrets_cb (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *connection, GError *error, gpointer user_data) diff --git a/src/nm-act-request.c b/src/nm-act-request.c index 6d8bb0652e..25a1dd9b4f 100644 --- a/src/nm-act-request.c +++ b/src/nm-act-request.c @@ -28,6 +28,8 @@ #include #include +#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,6 +92,7 @@ nm_act_request_get_applied_connection (NMActRequest *req) /*****************************************************************************/ struct _NMActRequestGetSecretsCallId { + CList call_ids_lst; NMActRequest *self; NMActRequestSecretsFunc callback; gpointer callback_data; @@ -97,28 +100,15 @@ struct _NMActRequestGetSecretsCallId { 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 @@ -129,25 +119,25 @@ get_secrets_cb (NMSettingsConnection *connection, 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_init (&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,7 +171,7 @@ nm_act_request_get_secrets (NMActRequest *self, gpointer callback_data) { NMActRequestPrivate *priv; - GetSecretsInfo *info; + NMActRequestGetSecretsCallId *call_id; NMSettingsConnectionCallId call_id_s; NMSettingsConnection *settings_connection; NMConnection *applied_connection; @@ -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_init (&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); @@ -537,6 +530,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 +578,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) { diff --git a/src/nm-act-request.h b/src/nm-act-request.h index b854940442..5d1c9dfd3b 100644 --- a/src/nm-act-request.h +++ b/src/nm-act-request.h @@ -32,7 +32,7 @@ #define NM_ACT_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_ACT_REQUEST, NMActRequestClass)) struct _NMActRequestGetSecretsCallId; -typedef struct _NMActRequestGetSecretsCallId *NMActRequestGetSecretsCallId; +typedef struct _NMActRequestGetSecretsCallId NMActRequestGetSecretsCallId; GType nm_act_request_get_type (void); @@ -58,20 +58,20 @@ void nm_act_request_add_share_rule (NMActRequest *req, /* Secrets handling */ typedef void (*NMActRequestSecretsFunc) (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *connection, GError *error, gpointer user_data); -NMActRequestGetSecretsCallId nm_act_request_get_secrets (NMActRequest *req, - gboolean take_ref, - const char *setting_name, - NMSecretAgentGetSecretsFlags flags, - const char *hint, - NMActRequestSecretsFunc callback, - gpointer callback_data); +NMActRequestGetSecretsCallId *nm_act_request_get_secrets (NMActRequest *req, + gboolean take_ref, + const char *setting_name, + NMSecretAgentGetSecretsFlags flags, + const char *hint, + NMActRequestSecretsFunc callback, + gpointer callback_data); -void nm_act_request_cancel_secrets (NMActRequest *req, NMActRequestGetSecretsCallId call_id); +void nm_act_request_cancel_secrets (NMActRequest *req, NMActRequestGetSecretsCallId *call_id); void nm_act_request_clear_secrets (NMActRequest *self); #endif /* __NM_ACT_REQUEST_H__ */ diff --git a/src/ppp/nm-ppp-manager.c b/src/ppp/nm-ppp-manager.c index 3ef3f3dc84..7dd6a9b95c 100644 --- a/src/ppp/nm-ppp-manager.c +++ b/src/ppp/nm-ppp-manager.c @@ -96,7 +96,7 @@ typedef struct { NMActRequest *act_req; GDBusMethodInvocation *pending_secrets_context; - NMActRequestGetSecretsCallId secrets_id; + NMActRequestGetSecretsCallId *secrets_id; const char *secrets_setting_name; guint ppp_watch_id; @@ -287,7 +287,7 @@ extract_details_from_connection (NMConnection *connection, static void ppp_secrets_cb (NMActRequest *req, - NMActRequestGetSecretsCallId call_id, + NMActRequestGetSecretsCallId *call_id, NMSettingsConnection *settings_connection, /* unused (we pass NULL here) */ GError *error, gpointer user_data) diff --git a/src/settings/nm-agent-manager.c b/src/settings/nm-agent-manager.c index bcd178435f..0a52a94938 100644 --- a/src/settings/nm-agent-manager.c +++ b/src/settings/nm-agent-manager.c @@ -170,7 +170,7 @@ struct _NMAgentManagerCallId { /* Current agent being asked for secrets */ NMSecretAgent *current; - NMSecretAgentCallId current_call_id; + NMSecretAgentCallId *current_call_id; /* Stores the sorted list of NMSecretAgents which will be asked for secrets */ GSList *pending; @@ -832,7 +832,7 @@ out: static void _con_get_request_done (NMSecretAgent *agent, - NMSecretAgentCallId call_id, + NMSecretAgentCallId *call_id, GVariant *secrets, GError *error, gpointer user_data) @@ -1276,7 +1276,7 @@ nm_agent_manager_cancel_secrets (NMAgentManager *self, static void _con_save_request_done (NMSecretAgent *agent, - NMSecretAgentCallId call_id, + NMSecretAgentCallId *call_id, GVariant *secrets, GError *error, gpointer user_data) @@ -1362,7 +1362,7 @@ nm_agent_manager_save_secrets (NMAgentManager *self, static void _con_del_request_done (NMSecretAgent *agent, - NMSecretAgentCallId call_id, + NMSecretAgentCallId *call_id, GVariant *secrets, GError *error, gpointer user_data) diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c index 593216a9f1..99b955ed4a 100644 --- a/src/settings/nm-secret-agent.c +++ b/src/settings/nm-secret-agent.c @@ -118,9 +118,7 @@ struct _NMSecretAgentCallId { gpointer callback_data; }; -typedef struct _NMSecretAgentCallId Request; - -static Request * +static NMSecretAgentCallId * request_new (NMSecretAgent *self, const char *dbus_command, /* this must be a static string. */ const char *path, @@ -128,9 +126,9 @@ request_new (NMSecretAgent *self, NMSecretAgentCallback callback, gpointer callback_data) { - Request *r; + NMSecretAgentCallId *r; - r = g_slice_new0 (Request); + r = g_slice_new0 (NMSecretAgentCallId); r->agent = self; r->path = g_strdup (path); r->setting_name = g_strdup (setting_name); @@ -146,7 +144,7 @@ request_new (NMSecretAgent *self, #define request_new(self,dbus_command,path,setting_name,callback,callback_data) request_new(self,""dbus_command"",path,setting_name,callback,callback_data) static void -request_free (Request *r) +request_free (NMSecretAgentCallId *r) { NMSecretAgent *self = r->agent; @@ -156,11 +154,11 @@ request_free (Request *r) g_free (r->setting_name); if (r->cancellable) g_object_unref (r->cancellable); - g_slice_free (Request, r); + g_slice_free (NMSecretAgentCallId, r); } static gboolean -request_check_return (Request *r) +request_check_return (NMSecretAgentCallId *r) { if (!r->cancellable) return FALSE; @@ -336,7 +334,7 @@ get_callback (GObject *proxy, GAsyncResult *result, gpointer user_data) { - Request *r = user_data; + NMSecretAgentCallId *r = user_data; if (request_check_return (r)) { NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent); @@ -352,7 +350,7 @@ get_callback (GObject *proxy, request_free (r); } -NMSecretAgentCallId +NMSecretAgentCallId * nm_secret_agent_get_secrets (NMSecretAgent *self, const char *path, NMConnection *connection, @@ -365,7 +363,7 @@ nm_secret_agent_get_secrets (NMSecretAgent *self, NMSecretAgentPrivate *priv; static const char *no_hints[] = { NULL }; GVariant *dict; - Request *r; + NMSecretAgentCallId *r; g_return_val_if_fail (NM_IS_SECRET_AGENT (self), NULL); g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); @@ -418,7 +416,7 @@ cancel_done (GObject *proxy, GAsyncResult *result, gpointer user_data) } static void -do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing) +do_cancel_secrets (NMSecretAgent *self, NMSecretAgentCallId *r, gboolean disposing) { NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (self); GCancellable *cancellable; @@ -474,9 +472,9 @@ do_cancel_secrets (NMSecretAgent *self, Request *r, gboolean disposing) * callback before nm_secret_agent_cancel_secrets() returns. */ void -nm_secret_agent_cancel_secrets (NMSecretAgent *self, NMSecretAgentCallId call_id) +nm_secret_agent_cancel_secrets (NMSecretAgent *self, NMSecretAgentCallId *call_id) { - Request *r = call_id; + NMSecretAgentCallId *r = call_id; g_return_if_fail (NM_IS_SECRET_AGENT (self)); g_return_if_fail (r); @@ -496,7 +494,7 @@ agent_save_cb (GObject *proxy, GAsyncResult *result, gpointer user_data) { - Request *r = user_data; + NMSecretAgentCallId *r = user_data; if (request_check_return (r)) { NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent); @@ -511,7 +509,7 @@ agent_save_cb (GObject *proxy, request_free (r); } -NMSecretAgentCallId +NMSecretAgentCallId * nm_secret_agent_save_secrets (NMSecretAgent *self, const char *path, NMConnection *connection, @@ -520,7 +518,7 @@ nm_secret_agent_save_secrets (NMSecretAgent *self, { NMSecretAgentPrivate *priv; GVariant *dict; - Request *r; + NMSecretAgentCallId *r; g_return_val_if_fail (NM_IS_SECRET_AGENT (self), NULL); g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); @@ -548,7 +546,7 @@ agent_delete_cb (GObject *proxy, GAsyncResult *result, gpointer user_data) { - Request *r = user_data; + NMSecretAgentCallId *r = user_data; if (request_check_return (r)) { NMSecretAgentPrivate *priv = NM_SECRET_AGENT_GET_PRIVATE (r->agent); @@ -563,7 +561,7 @@ agent_delete_cb (GObject *proxy, request_free (r); } -NMSecretAgentCallId +NMSecretAgentCallId * nm_secret_agent_delete_secrets (NMSecretAgent *self, const char *path, NMConnection *connection, @@ -572,7 +570,7 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self, { NMSecretAgentPrivate *priv; GVariant *dict; - Request *r; + NMSecretAgentCallId *r; g_return_val_if_fail (NM_IS_SECRET_AGENT (self), NULL); g_return_val_if_fail (NM_IS_CONNECTION (connection), NULL); @@ -769,7 +767,7 @@ dispose (GObject *object) again: c_list_for_each (iter, &priv->requests) { c_list_unlink_init (iter); - do_cancel_secrets (self, c_list_entry (iter, Request, lst), TRUE); + do_cancel_secrets (self, c_list_entry (iter, NMSecretAgentCallId, lst), TRUE); goto again; } diff --git a/src/settings/nm-secret-agent.h b/src/settings/nm-secret-agent.h index 54c5b39827..64b103aa78 100644 --- a/src/settings/nm-secret-agent.h +++ b/src/settings/nm-secret-agent.h @@ -33,8 +33,7 @@ #define NM_SECRET_AGENT_DISCONNECTED "disconnected" typedef struct _NMSecretAgentClass NMSecretAgentClass; - -typedef struct _NMSecretAgentCallId *NMSecretAgentCallId; +typedef struct _NMSecretAgentCallId NMSecretAgentCallId; GType nm_secret_agent_get_type (void); @@ -67,12 +66,12 @@ gboolean nm_secret_agent_has_permission (NMSecretAgent *agent, const char *permission); typedef void (*NMSecretAgentCallback) (NMSecretAgent *agent, - NMSecretAgentCallId call_id, + NMSecretAgentCallId *call_id, GVariant *new_secrets, /* NULL for save & delete */ GError *error, gpointer user_data); -NMSecretAgentCallId nm_secret_agent_get_secrets (NMSecretAgent *agent, +NMSecretAgentCallId *nm_secret_agent_get_secrets (NMSecretAgent *agent, const char *path, NMConnection *connection, const char *setting_name, @@ -82,18 +81,18 @@ NMSecretAgentCallId nm_secret_agent_get_secrets (NMSecretAgent *agent, gpointer callback_data); void nm_secret_agent_cancel_secrets (NMSecretAgent *agent, - NMSecretAgentCallId call_id); + NMSecretAgentCallId *call_id); -NMSecretAgentCallId nm_secret_agent_save_secrets (NMSecretAgent *agent, - const char *path, - NMConnection *connection, - NMSecretAgentCallback callback, - gpointer callback_data); +NMSecretAgentCallId *nm_secret_agent_save_secrets (NMSecretAgent *agent, + const char *path, + NMConnection *connection, + NMSecretAgentCallback callback, + gpointer callback_data); -NMSecretAgentCallId nm_secret_agent_delete_secrets (NMSecretAgent *agent, - const char *path, - NMConnection *connection, - NMSecretAgentCallback callback, - gpointer callback_data); +NMSecretAgentCallId *nm_secret_agent_delete_secrets (NMSecretAgent *agent, + const char *path, + NMConnection *connection, + NMSecretAgentCallback callback, + gpointer callback_data); #endif /* __NETWORKMANAGER_SECRET_AGENT_H__ */