diff --git a/ChangeLog b/ChangeLog index ef6a493a8..5f1b86152 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-08-20 Dan Williams + + * src/nm-device-802-11-wireless.c + src/nm-device-802-3-ethernet.c + - (real_is_up): move device-specific tests before generic IFF_UP test, + because when the card is pulled or the module removed, the device + is already !IFF_UP and then device-specific cleanup (removing + the supplicant interface, periodic checks, etc) never gets done + 2007-08-20 Dan Williams * src/nm-manager.c diff --git a/src/nm-device-802-11-wireless.c b/src/nm-device-802-11-wireless.c index bd0ef7db1..0c4d7c1df 100644 --- a/src/nm-device-802-11-wireless.c +++ b/src/nm-device-802-11-wireless.c @@ -564,10 +564,11 @@ nm_device_802_11_periodic_update (gpointer data) static gboolean real_is_up (NMDevice *device) { - if (!NM_DEVICE_CLASS (nm_device_802_11_wireless_parent_class)->is_up (device)) - return FALSE; + /* Try device-specific tests first */ + if (NM_DEVICE_802_11_WIRELESS_GET_PRIVATE (device)->periodic_source_id) + return TRUE; - return NM_DEVICE_802_11_WIRELESS_GET_PRIVATE (device)->periodic_source_id != 0; + return NM_DEVICE_CLASS (nm_device_802_11_wireless_parent_class)->is_up (device); } static gboolean diff --git a/src/nm-device-802-3-ethernet.c b/src/nm-device-802-3-ethernet.c index a93a88dcb..228272204 100644 --- a/src/nm-device-802-3-ethernet.c +++ b/src/nm-device-802-3-ethernet.c @@ -157,10 +157,11 @@ out: static gboolean real_is_up (NMDevice *device) { - if (!NM_DEVICE_CLASS (nm_device_802_3_ethernet_parent_class)->is_up (device)) - return FALSE; + /* Try device-specific tests first */ + if (NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device)->sup_iface) + return TRUE; - return !!NM_DEVICE_802_3_ETHERNET_GET_PRIVATE (device)->sup_iface; + return NM_DEVICE_CLASS (nm_device_802_3_ethernet_parent_class)->is_up (device); } static gboolean