summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-04-18 13:24:34 +0200
committerThomas Haller <thaller@redhat.com>2023-06-30 17:58:53 +0200
commitcef0c31b2ca7b22fcdeb0208e84ab04cf3a2a0ef (patch)
treec25371735b230e1a9d8760ffd45c5de8f79c890f
parentd412eb8aca3c3eec94d8be16d6a7636794312441 (diff)
core: simplify tracking of delete_on_deactivate idle action
Before commit a42682d44fe2 ('device: take reference to device object before 'delete_on_deactivate''), we used a weak pointer to track the idle action. As we now use a strong reference, we can store all data about the idle action in NMDevice itself. Drop DeleteOnDeactivateData. (cherry picked from commit b48c31432864f4e075f74b2e68710404d8c74049)
-rw-r--r--src/core/devices/nm-device.c51
1 files changed, 15 insertions, 36 deletions
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
index e065eb63b5..ef00a4b26f 100644
--- a/src/core/devices/nm-device.c
+++ b/src/core/devices/nm-device.c
@@ -132,11 +132,6 @@ typedef struct {
} SlaveInfo;
typedef struct {
- NMDevice *device;
- guint idle_add_id;
-} DeleteOnDeactivateData;
-
-typedef struct {
NMDevice *device;
GCancellable *cancellable;
NMPlatformAsyncCallback callback;
@@ -512,8 +507,8 @@ typedef struct _NMDevicePrivate {
NMUnmanagedFlags unmanaged_mask;
NMUnmanagedFlags unmanaged_flags;
- DeleteOnDeactivateData
- *delete_on_deactivate_data; /* data for scheduled cleanup when deleting link (g_idle_add) */
+
+ GSource *delete_on_deactivate_idle_source;
GCancellable *deactivating_cancellable;
@@ -8334,7 +8329,7 @@ nm_device_autoconnect_allowed(NMDevice *self)
return FALSE;
}
- if (priv->delete_on_deactivate_data)
+ if (priv->delete_on_deactivate_idle_source)
return FALSE;
/* The 'autoconnect-allowed' signal is emitted on a device to allow
@@ -12613,16 +12608,13 @@ nm_device_is_nm_owned(NMDevice *self)
static gboolean
delete_on_deactivate_link_delete(gpointer user_data)
{
- DeleteOnDeactivateData *data = user_data;
- nm_auto_unref_object NMDevice *self = data->device;
+ nm_auto_unref_object NMDevice *self = user_data;
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
gs_free_error GError *error = NULL;
- _LOGD(LOGD_DEVICE,
- "delete_on_deactivate: cleanup and delete virtual link (id=%u)",
- data->idle_add_id);
+ _LOGD(LOGD_DEVICE, "delete_on_deactivate: cleanup and delete virtual link");
- priv->delete_on_deactivate_data = NULL;
+ nm_clear_g_source_inst(&priv->delete_on_deactivate_idle_source);
if (!nm_device_unrealize(self, TRUE, &error))
_LOGD(LOGD_DEVICE, "delete_on_deactivate: unrealizing failed (%s)", error->message);
@@ -12633,8 +12625,7 @@ delete_on_deactivate_link_delete(gpointer user_data)
nm_device_recheck_auto_activate_schedule(self);
}
- g_free(data);
- return FALSE;
+ return G_SOURCE_CONTINUE;
}
static void
@@ -12642,25 +12633,16 @@ delete_on_deactivate_unschedule(NMDevice *self)
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
- if (priv->delete_on_deactivate_data) {
- DeleteOnDeactivateData *data = priv->delete_on_deactivate_data;
-
- priv->delete_on_deactivate_data = NULL;
-
- g_source_remove(data->idle_add_id);
- _LOGD(LOGD_DEVICE,
- "delete_on_deactivate: cancel cleanup and delete virtual link (id=%u)",
- data->idle_add_id);
- g_object_unref(data->device);
- g_free(data);
+ if (nm_clear_g_source_inst(&priv->delete_on_deactivate_idle_source)) {
+ _LOGD(LOGD_DEVICE, "delete_on_deactivate: cancel cleanup and delete virtual link");
+ g_object_unref(self);
}
}
static void
delete_on_deactivate_check_and_schedule(NMDevice *self)
{
- NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
- DeleteOnDeactivateData *data;
+ NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE(self);
if (!priv->nm_owned)
return;
@@ -12674,14 +12656,11 @@ delete_on_deactivate_check_and_schedule(NMDevice *self)
return;
delete_on_deactivate_unschedule(self); /* always cancel and reschedule */
- data = g_new(DeleteOnDeactivateData, 1);
- data->device = g_object_ref(self);
- data->idle_add_id = g_idle_add(delete_on_deactivate_link_delete, data);
- priv->delete_on_deactivate_data = data;
+ g_object_ref(self);
+ priv->delete_on_deactivate_idle_source =
+ nm_g_idle_add_source(delete_on_deactivate_link_delete, self);
- _LOGD(LOGD_DEVICE,
- "delete_on_deactivate: schedule cleanup and delete virtual link (id=%u)",
- data->idle_add_id);
+ _LOGD(LOGD_DEVICE, "delete_on_deactivate: schedule cleanup and delete virtual link");
}
static void