mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-07 07:50:17 +01:00
manager: fix state transition on resuming from sleep
When going to sleep, we unmanage devices setting the unmanaged flags
immediately but delaying the state transition (because we do it from
another state transition). The signal handler can be executed after
the wake and, especially, after we have already re-managed the device,
making the device unmanaged again.
Detect such situation and force the state to UNMANAGED (which will
also clear any pending state change), so that later we manage the
device again and it will try to activate any available connection.
Fixes: 81ea812362
https://bugzilla.redhat.com/show_bug.cgi?id=1382526
This commit is contained in:
parent
d8dd4e8bc2
commit
5f1e36e026
1 changed files with 13 additions and 3 deletions
|
|
@ -4125,16 +4125,26 @@ do_sleep_wake (NMManager *self, gboolean sleeping_changed)
|
|||
|
||||
if (waking_from_suspend) {
|
||||
sleep_devices_clear (self);
|
||||
/* Belatedly take down Wake-on-LAN devices; ideally we wouldn't have to do this
|
||||
* but for now it's the only way to make sure we re-check their connectivity.
|
||||
*/
|
||||
for (iter = priv->devices; iter; iter = iter->next) {
|
||||
NMDevice *device = iter->data;
|
||||
|
||||
if (nm_device_is_software (device))
|
||||
continue;
|
||||
|
||||
/* Belatedly take down Wake-on-LAN devices; ideally we wouldn't have to do this
|
||||
* but for now it's the only way to make sure we re-check their connectivity.
|
||||
*/
|
||||
if (device_is_wake_on_lan (device))
|
||||
nm_device_set_unmanaged_by_flags (device, NM_UNMANAGED_SLEEPING, TRUE, NM_DEVICE_STATE_REASON_SLEEPING);
|
||||
|
||||
/* Check if the device is unmanaged but the state transition is still pending.
|
||||
* If so, change state now so that later we re-manage the device forcing a
|
||||
* re-check of available connections.
|
||||
*/
|
||||
if ( !nm_device_get_managed (device, FALSE)
|
||||
&& nm_device_get_state (device) != NM_DEVICE_STATE_UNMANAGED) {
|
||||
nm_device_state_changed (device, NM_DEVICE_STATE_UNMANAGED, NM_DEVICE_STATE_REASON_SLEEPING);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue