Port: handle ctrl+c on Mingw
authorMichael Jeanson <mjeanson@efficios.com>
Wed, 31 May 2017 19:13:41 +0000 (15:13 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 29 Aug 2017 18:31:26 +0000 (14:31 -0400)
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
cli/babeltrace.c

index 8c0c50de54b1c65f5a5d29c6812255374d755c64..025fc922afc8cf3a05a2167a2ec950cf3afb1739 100644 (file)
@@ -89,8 +89,30 @@ static bool canceled = false;
 
 GPtrArray *loaded_plugins;
 
+#ifdef __MINGW32__
+#include <windows.h>
+
+static
+BOOL WINAPI signal_handler(DWORD signal) {
+       if (the_graph) {
+               bt_graph_cancel(the_graph);
+       }
+
+       canceled = true;
+
+       return TRUE;
+}
+
 static
-void sigint_handler(int signum)
+void set_signal_handler(void)
+{
+       if (!SetConsoleCtrlHandler(signal_handler, TRUE)) {
+               BT_LOGE("Failed to set the ctrl+c handler.");
+       }
+}
+#else /* __MINGW32__ */
+static
+void signal_handler(int signum)
 {
        if (signum != SIGINT) {
                return;
@@ -103,6 +125,22 @@ void sigint_handler(int signum)
        canceled = true;
 }
 
+static
+void set_signal_handler(void)
+{
+       struct sigaction new_action, old_action;
+
+       new_action.sa_handler = signal_handler;
+       sigemptyset(&new_action.sa_mask);
+       new_action.sa_flags = 0;
+       sigaction(SIGINT, NULL, &old_action);
+
+       if (old_action.sa_handler != SIG_IGN) {
+               sigaction(SIGINT, &new_action, NULL);
+       }
+}
+#endif /* __MINGW32__ */
+
 static
 void init_static_data(void)
 {
@@ -2623,21 +2661,6 @@ void set_auto_log_levels(struct bt_config *cfg)
        }
 }
 
-static
-void set_sigint_handler(void)
-{
-       struct sigaction new_action, old_action;
-
-       new_action.sa_handler = sigint_handler;
-       sigemptyset(&new_action.sa_mask);
-       new_action.sa_flags = 0;
-       sigaction(SIGINT, NULL, &old_action);
-
-       if (old_action.sa_handler != SIG_IGN) {
-               sigaction(SIGINT, &new_action, NULL);
-       }
-}
-
 int main(int argc, const char **argv)
 {
        int ret;
@@ -2645,7 +2668,7 @@ int main(int argc, const char **argv)
        struct bt_config *cfg;
 
        init_log_level();
-       set_sigint_handler();
+       set_signal_handler();
        init_static_data();
        cfg = bt_config_cli_args_create_with_default(argc, argv, &retcode);
 
This page took 0.026321 seconds and 4 git commands to generate.