[tor-commits] [tor/master] Add support for console control signals in Windows

nickm at torproject.org nickm at torproject.org
Thu May 21 14:08:58 UTC 2020


commit c4fb3bfed5c4e3e2e263e23e4a46ad81ddbc5936
Author: Damon Harris <TheDcoder at protonmail.com>
Date:   Wed May 13 15:05:54 2020 +0530

    Add support for console control signals in Windows
---
 changes/ticket34211 |  3 +++
 src/app/main/main.c | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/changes/ticket34211 b/changes/ticket34211
new file mode 100644
index 000000000..b454873ab
--- /dev/null
+++ b/changes/ticket34211
@@ -0,0 +1,3 @@
+  o Minor features (windows):
+    - Add support for console control signals like Ctrl+C in Windows
+      Closes ticket 34211. Patch from Damon Harris (TheDcoder).
diff --git a/src/app/main/main.c b/src/app/main/main.c
index 689bc526a..c2300f7a3 100644
--- a/src/app/main/main.c
+++ b/src/app/main/main.c
@@ -294,6 +294,19 @@ process_signal(int sig)
   }
 }
 
+#ifdef _WIN32
+/** Activate SIGINT on reciving a control signal in console */
+static BOOL WINAPI
+process_win32_console_ctrl(DWORD ctrl_type)
+{
+  /* Ignore type of the ctrl signal */
+  (void) ctrl_type;
+
+  activate_signal(SIGINT);
+  return TRUE;
+}
+#endif
+
 /**
  * Write current memory usage information to the log.
  */
@@ -496,6 +509,13 @@ handle_signals(void)
                       &signal_handlers[i].signal_value);
     }
   }
+
+#ifdef _WIN32
+    /* Windows lacks traditional POSIX signals but WinAPI provides a function
+     * to handle control signals like Ctrl+C in the console, we can use this to
+     * simulate the SIGINT signal */
+    if (enabled) SetConsoleCtrlHandler(process_win32_console_ctrl, TRUE);
+#endif
 }
 
 /* Cause the signal handler for signal_num to be called in the event loop. */





More information about the tor-commits mailing list