summaryrefslogtreecommitdiff
path: root/src/nm-dispatcher
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2021-08-03 11:23:00 +0200
committerThomas Haller <thaller@redhat.com>2021-08-04 09:41:10 +0200
commitd127b1fb79c2693f7c62aa964afb74a74e31925b (patch)
tree8514fbcb7420396d4b674643e6155903f22fd978 /src/nm-dispatcher
parent273491922e632d3568a11026e2d93e1725676212 (diff)
downloadNetworkManager-d127b1fb79c2693f7c62aa964afb74a74e31925b.tar.gz
dispatcher: minor various cleanup of timeout and shutdown
- use nm_g_timeout_add_source() for millisecond precision of idle timeout. - schedule the first idle timeout before registering the D-Bus object. - let the signal handler do nothing, if we are already quitting. In practice, this only silences the extra logging.
Diffstat (limited to 'src/nm-dispatcher')
-rw-r--r--src/nm-dispatcher/nm-dispatcher.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/nm-dispatcher/nm-dispatcher.c b/src/nm-dispatcher/nm-dispatcher.c
index 039815d313..4ee7153afb 100644
--- a/src/nm-dispatcher/nm-dispatcher.c
+++ b/src/nm-dispatcher/nm-dispatcher.c
@@ -201,10 +201,14 @@ quit_timeout_cb(gpointer user_data)
static void
quit_timeout_reschedule(void)
{
- if (!gl.persist) {
- nm_clear_g_source_inst(&gl.quit_source);
- gl.quit_source = nm_g_timeout_add_source_seconds(10, quit_timeout_cb, NULL);
- }
+ if (gl.persist)
+ return;
+
+ if (gl.shutdown_quitting)
+ return;
+
+ nm_clear_g_source_inst(&gl.quit_source);
+ gl.quit_source = nm_g_timeout_add_source(10000, quit_timeout_cb, NULL);
}
/**
@@ -961,11 +965,11 @@ logging_shutdown(void)
static gboolean
signal_handler(gpointer user_data)
{
- int signo = GPOINTER_TO_INT(user_data);
-
- _LOG_X_I("Caught signal %d, shutting down...", signo);
- gl.shutdown_quitting = TRUE;
- g_cancellable_cancel(gl.quit_cancellable);
+ if (!gl.shutdown_quitting) {
+ gl.shutdown_quitting = TRUE;
+ _LOG_X_I("Caught signal %d, shutting down...", GPOINTER_TO_INT(user_data));
+ g_cancellable_cancel(gl.quit_cancellable);
+ }
return G_SOURCE_CONTINUE;
}
@@ -1039,6 +1043,8 @@ main(int argc, char **argv)
gl.requests_waiting = g_queue_new();
+ quit_timeout_reschedule();
+
dbus_regist_id =
g_dbus_connection_register_object(gl.dbus_connection,
NM_DISPATCHER_DBUS_PATH,
@@ -1061,8 +1067,6 @@ main(int argc, char **argv)
NULL,
NULL);
- quit_timeout_reschedule();
-
while (TRUE) {
if (gl.shutdown_timeout || gl.shutdown_quitting)
break;
@@ -1071,6 +1075,9 @@ main(int argc, char **argv)
done:
+ gl.shutdown_quitting = TRUE;
+ g_cancellable_cancel(gl.quit_cancellable);
+
/* FIXME: nm-dispatcher does not exit-on-idle in a racefree manner.
* See https://lists.freedesktop.org/archives/dbus/2015-May/016671.html */