From adc32639209fd435cdaedc75793b95b096d689c7 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 6 Jun 2023 19:00:16 +0200 Subject: [PATCH] device: use GSource for tracking carrier-defer timeout Also no longer log the g_source_get_id(). It's not useful, because per device there must be only one timeout pending at any time. --- src/core/devices/nm-device.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c index b9c57d69d5..d754092659 100644 --- a/src/core/devices/nm-device.c +++ b/src/core/devices/nm-device.c @@ -536,10 +536,10 @@ typedef struct _NMDevicePrivate { /* Link stuff */ guint link_connected_id; guint link_disconnected_id; - guint carrier_defer_id; guint carrier_wait_id; gulong config_changed_id; gulong ifindex_changed_id; + GSource *carrier_defer_source; guint32 mtu; guint32 ip6_mtu; /* FIXME(l3cfg) */ guint32 mtu_initial; @@ -6639,24 +6639,20 @@ carrier_disconnected_action_cb(gpointer user_data) NMDevice *self = NM_DEVICE(user_data); NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - _LOGD(LOGD_DEVICE, - "carrier: link disconnected (calling deferred action) (id=%u)", - priv->carrier_defer_id); + _LOGD(LOGD_DEVICE, "carrier: link disconnected (calling deferred action)"); - priv->carrier_defer_id = 0; + nm_clear_g_source_inst(&priv->carrier_defer_source); carrier_changed(self, FALSE); - return FALSE; + return G_SOURCE_CONTINUE; } static void carrier_disconnected_action_cancel(NMDevice *self) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self); - guint id = priv->carrier_defer_id; - if (nm_clear_g_source(&priv->carrier_defer_id)) { - _LOGD(LOGD_DEVICE, "carrier: link disconnected (canceling deferred action) (id=%u)", id); - } + if (nm_clear_g_source_inst(&priv->carrier_defer_source)) + _LOGD(LOGD_DEVICE, "carrier: link disconnected (canceling deferred action)"); } void @@ -6696,16 +6692,16 @@ nm_device_set_carrier(NMDevice *self, gboolean carrier) _LOGD(LOGD_DEVICE, "carrier: link disconnected"); carrier_changed(self, FALSE); } else { - gint64 now_ms, until_ms; + gint64 until_ms; + gint64 now_ms; 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_defer_id = - g_timeout_add(until_ms - now_ms, carrier_disconnected_action_cb, self); + priv->carrier_defer_source = + nm_g_timeout_add_source(until_ms - now_ms, carrier_disconnected_action_cb, self); _LOGD(LOGD_DEVICE, - "carrier: link disconnected (deferring action for %ld milliseconds) (id=%u)", - (long) (until_ms - now_ms), - priv->carrier_defer_id); + "carrier: link disconnected (deferring action for %ld milliseconds)", + (long) (until_ms - now_ms)); } } }