mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-09-06 17:14:02 +00:00
device: use GSource for tracking carrier-wait timeout
This commit is contained in:
parent
6a54041ae1
commit
1ef58332b2
|
@ -536,9 +536,9 @@ typedef struct _NMDevicePrivate {
|
|||
/* Link stuff */
|
||||
guint link_connected_id;
|
||||
guint link_disconnected_id;
|
||||
guint carrier_wait_id;
|
||||
gulong config_changed_id;
|
||||
gulong ifindex_changed_id;
|
||||
GSource *carrier_wait_source;
|
||||
GSource *carrier_defer_source;
|
||||
guint32 mtu;
|
||||
guint32 ip6_mtu; /* FIXME(l3cfg) */
|
||||
|
@ -6680,12 +6680,12 @@ nm_device_set_carrier(NMDevice *self, gboolean carrier)
|
|||
NM_DEVICE_GET_CLASS(self)->carrier_changed_notify(self, carrier);
|
||||
carrier_changed(self, TRUE);
|
||||
|
||||
if (priv->carrier_wait_id) {
|
||||
if (priv->carrier_wait_source) {
|
||||
nm_device_remove_pending_action(self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
_carrier_wait_check_queued_act_request(self);
|
||||
}
|
||||
} else {
|
||||
if (priv->carrier_wait_id)
|
||||
if (priv->carrier_wait_source)
|
||||
nm_device_add_pending_action(self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
NM_DEVICE_GET_CLASS(self)->carrier_changed_notify(self, carrier);
|
||||
if (state <= NM_DEVICE_STATE_DISCONNECTED && !priv->queued_act_request) {
|
||||
|
@ -13738,7 +13738,7 @@ _carrier_wait_check_act_request_must_queue(NMDevice *self, NMActRequest *req)
|
|||
* request is not blocked waiting for carrier. */
|
||||
if (priv->carrier)
|
||||
return FALSE;
|
||||
if (priv->carrier_wait_id == 0)
|
||||
if (!priv->carrier_wait_source)
|
||||
return FALSE;
|
||||
|
||||
connection = nm_act_request_get_applied_connection(req);
|
||||
|
@ -14252,11 +14252,11 @@ carrier_wait_timeout(gpointer user_data)
|
|||
NMDevice *self = NM_DEVICE(user_data);
|
||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
|
||||
|
||||
priv->carrier_wait_id = 0;
|
||||
nm_clear_g_source_inst(&priv->carrier_wait_source);
|
||||
nm_device_remove_pending_action(self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
if (!priv->carrier)
|
||||
_carrier_wait_check_queued_act_request(self);
|
||||
return G_SOURCE_REMOVE;
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -14303,13 +14303,14 @@ carrier_detect_wait(NMDevice *self)
|
|||
*
|
||||
* If during that time carrier goes away, we declare the interface
|
||||
* as not ready. */
|
||||
nm_clear_g_source(&priv->carrier_wait_id);
|
||||
nm_clear_g_source_inst(&priv->carrier_wait_source);
|
||||
if (!priv->carrier)
|
||||
nm_device_add_pending_action(self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
|
||||
now_ms = nm_utils_get_monotonic_timestamp_msec();
|
||||
until_ms = NM_MAX(now_ms + _get_carrier_wait_ms(self), priv->carrier_wait_until_ms);
|
||||
priv->carrier_wait_id = g_timeout_add(until_ms - now_ms, carrier_wait_timeout, self);
|
||||
priv->carrier_wait_source =
|
||||
nm_g_timeout_add_source(until_ms - now_ms, carrier_wait_timeout, self);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -15301,7 +15302,7 @@ check_connection_available(NMDevice *self,
|
|||
return TRUE;
|
||||
|
||||
if (NM_FLAGS_HAS(flags, _NM_DEVICE_CHECK_CON_AVAILABLE_FOR_USER_REQUEST_WAITING_CARRIER)
|
||||
&& priv->carrier_wait_id != 0) {
|
||||
&& priv->carrier_wait_source) {
|
||||
/* The device has no carrier though the connection requires it.
|
||||
*
|
||||
* If we are still waiting for carrier, the connection is available
|
||||
|
@ -18151,7 +18152,7 @@ dispose(GObject *object)
|
|||
|
||||
available_connections_del_all(self);
|
||||
|
||||
if (nm_clear_g_source(&priv->carrier_wait_id))
|
||||
if (nm_clear_g_source_inst(&priv->carrier_wait_source))
|
||||
nm_device_remove_pending_action(self, NM_PENDING_ACTION_CARRIER_WAIT, FALSE);
|
||||
|
||||
_clear_queued_act_request(priv, NM_ACTIVE_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED);
|
||||
|
|
Loading…
Reference in a new issue