diff options
author | Dan Winship <danw@gnome.org> | 2014-02-17 14:57:43 -0500 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-02-17 14:57:43 -0500 |
commit | 62beb7a5b34b167ffde52dc78e587b3fa2d423c8 (patch) | |
tree | 51ef2b2382ba81bf36166801050fdf94f22bd564 | |
parent | f6f216f0a96942aaaacea26ffb7af72aab86f38c (diff) | |
parent | 4f0c70e94534abafde6a0459af74b68a7da724d9 (diff) | |
download | NetworkManager-62beb7a5b34b167ffde52dc78e587b3fa2d423c8.tar.gz |
Fix NMManager:startup tracking again (rh #1030583)
-rw-r--r-- | src/nm-policy.c | 80 |
1 files changed, 35 insertions, 45 deletions
diff --git a/src/nm-policy.c b/src/nm-policy.c index 34216c8717..90fbc36d8d 100644 --- a/src/nm-policy.c +++ b/src/nm-policy.c @@ -937,12 +937,14 @@ typedef struct { static void activate_data_free (ActivateData *data) { - if (data->autoactivate_id) { - nm_device_remove_pending_action (data->device, "autoactivate"); + NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (data->policy); + + nm_device_remove_pending_action (data->device, "autoactivate"); + priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, data); + + if (data->autoactivate_id) g_source_remove (data->autoactivate_id); - } g_object_unref (data->device); - memset (data, 0, sizeof (*data)); g_free (data); } @@ -960,9 +962,7 @@ auto_activate_device (gpointer user_data) policy = data->policy; priv = NM_POLICY_GET_PRIVATE (policy); - priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, data); data->autoactivate_id = 0; - nm_device_remove_pending_action (data->device, "autoactivate"); // FIXME: if a device is already activating (or activated) with a connection // but another connection now overrides the current one for that device, @@ -1015,24 +1015,6 @@ auto_activate_device (gpointer user_data) } static ActivateData * -activate_data_new (NMPolicy *policy, NMDevice *device, guint delay_seconds) -{ - ActivateData *data; - - data = g_malloc0 (sizeof (ActivateData)); - data->policy = policy; - data->device = g_object_ref (device); - if (delay_seconds > 0) - data->autoactivate_id = g_timeout_add_seconds (delay_seconds, auto_activate_device, data); - else - data->autoactivate_id = g_idle_add (auto_activate_device, data); - - nm_device_add_pending_action (device, "autoactivate"); - - return data; -} - -static ActivateData * find_pending_activation (GSList *list, NMDevice *device) { GSList *iter; @@ -1215,7 +1197,7 @@ sleeping_changed (NMManager *manager, GParamSpec *pspec, gpointer user_data) } static void -schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds) +schedule_activate_check (NMPolicy *policy, NMDevice *device) { NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy); ActivateData *data; @@ -1230,20 +1212,33 @@ schedule_activate_check (NMPolicy *policy, NMDevice *device, guint delay_seconds if (!nm_device_autoconnect_allowed (device)) return; - /* If the device already has an activation in-progress or waiting for - * authentication, don't start an auto-activation for it. - */ + if (find_pending_activation (priv->pending_activation_checks, device)) + return; + active_connections = nm_manager_get_active_connections (priv->manager); for (iter = active_connections; iter; iter = iter->next) { if (nm_active_connection_get_device (NM_ACTIVE_CONNECTION (iter->data)) == device) return; } - /* Schedule an auto-activation if there isn't one already for this device */ - if (find_pending_activation (priv->pending_activation_checks, device) == NULL) { - data = activate_data_new (policy, device, delay_seconds); - priv->pending_activation_checks = g_slist_append (priv->pending_activation_checks, data); - } + nm_device_add_pending_action (device, "autoactivate"); + + data = g_malloc0 (sizeof (ActivateData)); + data->policy = policy; + data->device = g_object_ref (device); + data->autoactivate_id = g_idle_add (auto_activate_device, data); + priv->pending_activation_checks = g_slist_append (priv->pending_activation_checks, data); +} + +static void +clear_pending_activate_check (NMPolicy *policy, NMDevice *device) +{ + NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy); + ActivateData *data; + + data = find_pending_activation (priv->pending_activation_checks, device); + if (data && data->autoactivate_id) + activate_data_free (data); } static gboolean @@ -1493,7 +1488,7 @@ device_state_changed (NMDevice *device, update_routing_and_dns (policy, FALSE); /* Device is now available for auto-activation */ - schedule_activate_check (policy, device, 0); + schedule_activate_check (policy, device); break; case NM_DEVICE_STATE_PREPARE: @@ -1601,25 +1596,25 @@ device_autoconnect_changed (NMDevice *device, gpointer user_data) { if (nm_device_get_autoconnect (device)) - schedule_activate_check ((NMPolicy *) user_data, device, 0); + schedule_activate_check ((NMPolicy *) user_data, device); } static void wireless_networks_changed (NMDevice *device, GObject *ap, gpointer user_data) { - schedule_activate_check ((NMPolicy *) user_data, device, 0); + schedule_activate_check ((NMPolicy *) user_data, device); } static void nsps_changed (NMDevice *device, GObject *nsp, gpointer user_data) { - schedule_activate_check ((NMPolicy *) user_data, device, 0); + schedule_activate_check ((NMPolicy *) user_data, device); } static void modem_enabled_changed (NMDevice *device, gpointer user_data) { - schedule_activate_check ((NMPolicy *) (user_data), device, 0); + schedule_activate_check ((NMPolicy *) (user_data), device); } typedef struct { @@ -1680,15 +1675,10 @@ device_removed (NMManager *manager, NMDevice *device, gpointer user_data) { NMPolicy *policy = (NMPolicy *) user_data; NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy); - ActivateData *tmp; GSList *iter; /* Clear any idle callbacks for this device */ - tmp = find_pending_activation (priv->pending_activation_checks, device); - if (tmp) { - priv->pending_activation_checks = g_slist_remove (priv->pending_activation_checks, tmp); - activate_data_free (tmp); - } + clear_pending_activate_check (policy, device); /* Clear any signal handlers for this device */ iter = priv->dev_ids; @@ -1837,7 +1827,7 @@ schedule_activate_all (NMPolicy *policy) devices = nm_manager_get_devices (priv->manager); for (iter = devices; iter; iter = g_slist_next (iter)) - schedule_activate_check (policy, NM_DEVICE (iter->data), 0); + schedule_activate_check (policy, NM_DEVICE (iter->data)); } static void |