summary refs log tree commit diff
path: root/src/core/nm-netns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/nm-netns.c')
-rw-r--r--src/core/nm-netns.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/nm-netns.c b/src/core/nm-netns.c
index d5a0317d..224070be 100644
--- a/src/core/nm-netns.c
+++ b/src/core/nm-netns.c
@@ -29,7 +29,7 @@ typedef struct {
     GHashTable *     l3cfgs;
     GHashTable *     shared_ips;
     CList            l3cfg_signal_pending_lst_head;
-    guint            signal_pending_idle_id;
+    GSource *        signal_pending_idle_source;
 } NMNetnsPrivate;
 
 struct _NMNetns {
@@ -189,7 +189,7 @@ _platform_signal_on_idle_cb(gpointer user_data)
     L3CfgData *              l3cfg_data;
     CList                    work_list;
 
-    priv->signal_pending_idle_id = 0;
+    nm_clear_g_source_inst(&priv->signal_pending_idle_source);
 
     /* we emit all queued signals together. However, we don't want to hook the
      * main loop for longer than the currently queued elements.
@@ -210,7 +210,7 @@ _platform_signal_on_idle_cb(gpointer user_data)
             nm_steal_int(&l3cfg_data->signal_pending_obj_type_flags));
     }
 
-    return G_SOURCE_REMOVE;
+    return G_SOURCE_CONTINUE;
 }
 
 static void
@@ -235,8 +235,9 @@ _platform_signal_cb(NMPlatform *  platform,
 
     if (c_list_is_empty(&l3cfg_data->signal_pending_lst)) {
         c_list_link_tail(&priv->l3cfg_signal_pending_lst_head, &l3cfg_data->signal_pending_lst);
-        if (priv->signal_pending_idle_id == 0)
-            priv->signal_pending_idle_id = g_idle_add(_platform_signal_on_idle_cb, self);
+        if (!priv->signal_pending_idle_source)
+            priv->signal_pending_idle_source =
+                nm_g_idle_add_source(_platform_signal_on_idle_cb, self);
     }
 
     _nm_l3cfg_notify_platform_change(l3cfg_data->l3cfg,
@@ -460,7 +461,7 @@ dispose(GObject *object)
     nm_assert(c_list_is_empty(&priv->l3cfg_signal_pending_lst_head));
     nm_assert(!priv->shared_ips);
 
-    nm_clear_g_source(&priv->signal_pending_idle_id);
+    nm_clear_g_source_inst(&priv->signal_pending_idle_source);
 
     if (priv->platform)
         g_signal_handlers_disconnect_by_data(priv->platform, &priv->_self_signal_user_data);