mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-02 12:20:12 +01:00
dispatcher: don't just exit() but always shutdown before exiting
It's ugly to uncoordinated just call exit(). We should quit the mainloop and clean up everything we had going. Note that since Handler has no dispose() function, we also need to hack a g_signal_handlers_disconnect_by_func(). This will change soon.
This commit is contained in:
parent
90e4ba15bc
commit
866189a001
1 changed files with 27 additions and 19 deletions
|
|
@ -43,6 +43,7 @@ static struct {
|
|||
guint quit_id;
|
||||
guint request_id_counter;
|
||||
gboolean ever_acquired_name;
|
||||
bool exit_with_failure;
|
||||
} gl;
|
||||
|
||||
typedef struct Request Request;
|
||||
|
|
@ -886,18 +887,17 @@ on_name_lost (GDBusConnection *connection,
|
|||
if (!connection) {
|
||||
if (!gl.ever_acquired_name) {
|
||||
_LOG_X_W ("Could not get the system bus. Make sure the message bus daemon is running!");
|
||||
exit (1);
|
||||
gl.exit_with_failure = TRUE;
|
||||
} else {
|
||||
_LOG_X_I ("System bus stopped. Exiting");
|
||||
exit (0);
|
||||
}
|
||||
} else if (!gl.ever_acquired_name) {
|
||||
_LOG_X_W ("Could not acquire the " NM_DISPATCHER_DBUS_SERVICE " service.");
|
||||
exit (1);
|
||||
} else {
|
||||
gl.exit_with_failure = TRUE;
|
||||
} else
|
||||
_LOG_X_I ("Lost the " NM_DISPATCHER_DBUS_SERVICE " name. Exiting");
|
||||
exit (0);
|
||||
}
|
||||
|
||||
g_main_loop_quit (gl.loop);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -964,11 +964,11 @@ int
|
|||
main (int argc, char **argv)
|
||||
{
|
||||
GOptionContext *opt_ctx;
|
||||
GError *error = NULL;
|
||||
gs_free_error GError *error = NULL;
|
||||
GDBusConnection *bus;
|
||||
Handler *handler;
|
||||
guint signal_id_term;
|
||||
guint signal_id_int;
|
||||
Handler *handler = NULL;
|
||||
guint signal_id_term = 0;
|
||||
guint signal_id_int = 0;
|
||||
|
||||
GOptionEntry entries[] = {
|
||||
{ "debug", 0, 0, G_OPTION_ARG_NONE, &gl.debug, "Output to console rather than syslog", NULL },
|
||||
|
|
@ -982,8 +982,8 @@ main (int argc, char **argv)
|
|||
|
||||
if (!g_option_context_parse (opt_ctx, &argc, &argv, &error)) {
|
||||
_LOG_X_W ("Error parsing command line arguments: %s", error->message);
|
||||
g_error_free (error);
|
||||
return 1;
|
||||
gl.exit_with_failure = TRUE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
g_option_context_free (opt_ctx);
|
||||
|
|
@ -1008,8 +1008,8 @@ main (int argc, char **argv)
|
|||
if (!bus) {
|
||||
_LOG_X_W ("Could not get the system bus (%s). Make sure the message bus daemon is running!",
|
||||
error->message);
|
||||
g_error_free (error);
|
||||
return 1;
|
||||
gl.exit_with_failure = TRUE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
handler = g_object_new (HANDLER_TYPE, NULL);
|
||||
|
|
@ -1019,8 +1019,8 @@ main (int argc, char **argv)
|
|||
&error);
|
||||
if (error) {
|
||||
_LOG_X_W ("Could not export Dispatcher D-Bus interface: %s", error->message);
|
||||
g_error_free (error);
|
||||
return 1;
|
||||
gl.exit_with_failure = 1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
g_bus_own_name_on_connection (bus,
|
||||
|
|
@ -1035,8 +1035,16 @@ main (int argc, char **argv)
|
|||
|
||||
g_main_loop_run (gl.loop);
|
||||
|
||||
g_queue_free (handler->requests_waiting);
|
||||
g_object_unref (handler);
|
||||
done:
|
||||
|
||||
nm_clear_pointer (&handler->requests_waiting, g_queue_free);
|
||||
|
||||
if (handler) {
|
||||
g_signal_handlers_disconnect_by_func (handler->dbus_dispatcher,
|
||||
G_CALLBACK (handle_action),
|
||||
handler);
|
||||
}
|
||||
g_clear_object (&handler);
|
||||
|
||||
nm_clear_g_source (&signal_id_term);
|
||||
nm_clear_g_source (&signal_id_int);
|
||||
|
|
@ -1046,6 +1054,6 @@ main (int argc, char **argv)
|
|||
if (!gl.debug)
|
||||
logging_shutdown ();
|
||||
|
||||
return 0;
|
||||
return gl.exit_with_failure ? 1 : 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue