static void
signal_handler (int signum)
{
- on_app_exit (data);
+ gboolean restart;
+
+ restart = (signum == SIGHUP);
+
+ on_app_exit (restart, data);
}
void
memset (&sig_action, 0, sizeof (sig_action));
sig_action.sa_handler = signal_handler;
sigaction (SIGINT, &sig_action, NULL);
+ sigaction (SIGHUP, &sig_action, NULL);
}
+void
+restart_application (const char **args) {
+ execvp (args[0], args);
+}
#include <glib.h>
#include <uuid/uuid.h>
-typedef void (* ApplicationExitCb) (gpointer user_data);
+typedef void (* ApplicationExitCb) (gboolean restart,
+ gpointer user_data);
G_GNUC_INTERNAL xmlNode *
get_xml_element (xmlNode *node,
on_application_exit (ApplicationExitCb app_exit_cb,
gpointer user_data);
+G_GNUC_INTERNAL void
+restart_application (const char **args);
+
#endif /* __CSTUFF_H__ */
[CCode (cname = "generate_random_udn", cheader_filename = "cstuff.h")]
public static string generate_random_udn ();
- public delegate void ApplicationExitCb ();
+ public delegate void ApplicationExitCb (bool restart);
[CCode (cname = "on_application_exit", cheader_filename = "cstuff.h")]
public static void on_application_exit
(ApplicationExitCb app_exit_cb);
+
+ [CCode (cname = "restart_application", cheader_filename = "cstuff.h")]
+ public static void restart_application (
+ [CCode (array_length = false,
+ array_null_terminated = true)]
+ string[] args);
}
}
private MainLoop main_loop;
private int exit_code;
+ public bool restart;
private Main () throws GLib.Error {
Environment.set_application_name (_(BuildConfig.PACKAGE_NAME));
public void exit (int exit_code) {
this.exit_code = exit_code;
+
this.main_loop.quit ();
}
return this.exit_code;
}
- private void application_exit_cb () {
+ private void application_exit_cb (bool restart) {
+ this.restart = restart;
+
this.exit (0);
}
Main main;
DBusService service;
+ var original_args = args;
+
try {
// Parse commandline options
CmdlineConfig.parse_args (ref args);
int exit_code = main.run ();
+ if (main.restart) {
+ Utils.restart_application (original_args);
+ }
+
return exit_code;
}
}