summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-06-24 09:42:55 +0200
committerThomas Haller <thaller@redhat.com>2021-06-28 13:31:33 +0200
commitb9c10512cb279d0df7de608a8c3099a6f018b055 (patch)
treea082df9440a60293d4d31fc663f936b334fb078f
parent0389a4786c73a9ca112fe58a293777da2c0fbb94 (diff)
downloadNetworkManager-b9c10512cb279d0df7de608a8c3099a6f018b055.tar.gz
device: track refresh_rate timer as GSource instead of source id
Using the guint source ID always requires an additional hash lookup during removal to find the real source instance. Use instead the underlying GSource instance.
-rw-r--r--src/core/devices/nm-device.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index 1c70ecb328..d963863353 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -686,10 +686,10 @@ typedef struct _NMDevicePrivate {
guint sriov_reset_pending;
struct {
- guint timeout_id;
- guint refresh_rate_ms;
- guint64 tx_bytes;
- guint64 rx_bytes;
+ GSource *timeout_source;
+ guint refresh_rate_ms;
+ guint64 tx_bytes;
+ guint64 rx_bytes;
} stats;
bool mtu_force_set_done : 1;
@@ -3341,7 +3341,7 @@ _stats_set_refresh_rate(NMDevice *self, guint refresh_rate_ms)
if (_stats_refresh_rate_real(old_rate) == refresh_rate_ms)
return;
- nm_clear_g_source(&priv->stats.timeout_id);
+ nm_clear_g_source_inst(&priv->stats.timeout_source);
if (!refresh_rate_ms)
return;
@@ -3353,7 +3353,7 @@ _stats_set_refresh_rate(NMDevice *self, guint refresh_rate_ms)
if (ifindex > 0)
nm_platform_link_refresh(nm_device_get_platform(self), ifindex);
- priv->stats.timeout_id = g_timeout_add(refresh_rate_ms, _stats_timeout_cb, self);
+ priv->stats.timeout_source = nm_g_timeout_add_source(refresh_rate_ms, _stats_timeout_cb, self);
}
/*****************************************************************************/
@@ -5920,7 +5920,7 @@ realize_start_setup(NMDevice * self,
NMPlatform * platform;
NMDeviceCapabilities capabilities = 0;
NMConfig * config;
- guint real_rate;
+ guint refresh_rate_ms;
gboolean unmanaged;
/* plink is a NMPlatformLink type, however, we require it to come from the platform
@@ -6028,10 +6028,12 @@ realize_start_setup(NMDevice * self,
nm_device_set_carrier_from_platform(self);
- nm_assert(!priv->stats.timeout_id);
- real_rate = _stats_refresh_rate_real(priv->stats.refresh_rate_ms);
- if (real_rate)
- priv->stats.timeout_id = g_timeout_add(real_rate, _stats_timeout_cb, self);
+ nm_assert(!priv->stats.timeout_source);
+ refresh_rate_ms = _stats_refresh_rate_real(priv->stats.refresh_rate_ms);
+ if (refresh_rate_ms > 0) {
+ priv->stats.timeout_source =
+ nm_g_timeout_add_source(refresh_rate_ms, _stats_timeout_cb, self);
+ }
klass->realize_start_notify(self, plink);
@@ -6217,7 +6219,7 @@ nm_device_unrealize(NMDevice *self, gboolean remove_resources, GError **error)
_notify(self, PROP_PHYSICAL_PORT_ID);
}
- nm_clear_g_source(&priv->stats.timeout_id);
+ nm_clear_g_source_inst(&priv->stats.timeout_source);
_stats_update_counters(self, 0, 0);
priv->hw_addr_len_ = 0;
@@ -18378,7 +18380,7 @@ dispose(GObject *object)
nm_clear_g_source(&priv->check_delete_unrealized_id);
- nm_clear_g_source(&priv->stats.timeout_id);
+ nm_clear_g_source_inst(&priv->stats.timeout_source);
carrier_disconnected_action_cancel(self);