diff options
| author | Michael Biebl <biebl@debian.org> | 2025-02-12 13:46:50 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2025-02-12 13:46:50 +0100 |
| commit | 8bdf070ff046f482f6eb5e2b15ebc216f5d1e3da (patch) | |
| tree | f706478d189d54c6532e8863d4b0d5ff5575af60 /src/libnm-client-impl/nm-vpn-service-plugin.c | |
| parent | 818258cf34b83fbc754633295e1052d4752d7b15 (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.c | 32 |
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), |