summary refs log tree commit diff
path: root/src/libnm-client-impl/nm-vpn-service-plugin.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2025-02-12 13:46:50 +0100
committerMichael Biebl <biebl@debian.org>2025-02-12 13:46:50 +0100
commit8bdf070ff046f482f6eb5e2b15ebc216f5d1e3da (patch)
treef706478d189d54c6532e8863d4b0d5ff5575af60 /src/libnm-client-impl/nm-vpn-service-plugin.c
parent818258cf34b83fbc754633295e1052d4752d7b15 (diff)
New upstream version 1.51.90 upstream/1.51.90
Diffstat (limited to 'src/libnm-client-impl/nm-vpn-service-plugin.c')
-rw-r--r--src/libnm-client-impl/nm-vpn-service-plugin.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/libnm-client-impl/nm-vpn-service-plugin.c b/src/libnm-client-impl/nm-vpn-service-plugin.c
index d26a4ff5..1235a2a5 100644
--- a/src/libnm-client-impl/nm-vpn-service-plugin.c
+++ b/src/libnm-client-impl/nm-vpn-service-plugin.c
@@ -232,11 +232,30 @@ nm_vpn_service_plugin_disconnect(NMVpnServicePlugin *plugin, GError **err)
 }
 
 static void
-nm_vpn_service_plugin_emit_quit(NMVpnServicePlugin *plugin)
+flushed_cb(GObject *object, GAsyncResult *res, gpointer data)
 {
+    NMVpnServicePlugin *plugin = NM_VPN_SERVICE_PLUGIN(data);
+    GError             *error  = NULL;
+
+    if (!g_dbus_connection_flush_finish(G_DBUS_CONNECTION(object), res, &error)) {
+        g_warning("Error flushing D-Bus connection: %s", error->message);
+        g_error_free(error);
+    }
+
     g_signal_emit(plugin, signals[QUIT], 0);
 }
 
+static void
+flush_and_quit(NMVpnServicePlugin *plugin)
+{
+    NMVpnServicePluginPrivate *priv = NM_VPN_SERVICE_PLUGIN_GET_PRIVATE(plugin);
+
+    if (priv->connection != NULL)
+        g_dbus_connection_flush(priv->connection, NULL, flushed_cb, plugin);
+    else
+        g_signal_emit(plugin, signals[QUIT], 0);
+}
+
 /**
  * nm_vpn_service_plugin_shutdown:
  * @plugin: the #NMVpnServicePlugin instance
@@ -305,7 +324,8 @@ quit_timer_expired(gpointer data)
     NMVpnServicePlugin *self = NM_VPN_SERVICE_PLUGIN(data);
 
     NM_VPN_SERVICE_PLUGIN_GET_PRIVATE(self)->quit_timer = 0;
-    nm_vpn_service_plugin_emit_quit(self);
+    flush_and_quit(self);
+
     return G_SOURCE_REMOVE;
 }
 
@@ -997,17 +1017,17 @@ impl_vpn_service_plugin_set_failure(NMVpnServicePlugin    *plugin,
 /*****************************************************************************/
 
 static void
-_emit_quit(gpointer data, gpointer user_data)
+_flush_and_quit_plugin(gpointer data, gpointer user_data)
 {
     NMVpnServicePlugin *plugin = data;
 
-    nm_vpn_service_plugin_emit_quit(plugin);
+    flush_and_quit(plugin);
 }
 
 static void
 sigterm_handler(int signum)
 {
-    g_slist_foreach(active_plugins, _emit_quit, NULL);
+    g_slist_foreach(active_plugins, _flush_and_quit_plugin, NULL);
 }
 
 static void
@@ -1204,7 +1224,7 @@ state_changed(NMVpnServicePlugin *plugin, NMVpnServiceState state)
         break;
     case NM_VPN_SERVICE_STATE_STOPPED:
         if (priv->dbus_watch_peer)
-            nm_vpn_service_plugin_emit_quit(plugin);
+            flush_and_quit(plugin);
         else
             schedule_quit_timer(plugin);
         nm_clear_g_dbus_connection_signal(nm_vpn_service_plugin_get_connection(plugin),