Jacek Caban : conhost: Ignore CONTROL_C_EXIT exceptions in Unix mode.

Alexandre Julliard julliard at winehq.org
Wed Dec 30 15:50:32 CST 2020


Module: wine
Branch: master
Commit: d7d315ddf40b22158fba76b1156ffe09770103de
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d7d315ddf40b22158fba76b1156ffe09770103de

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Dec 29 23:05:45 2020 +0100

conhost: Ignore CONTROL_C_EXIT exceptions in Unix mode.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50304
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/conhost/conhost.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c
index 4b156f21ea3..3e41577a44b 100644
--- a/programs/conhost/conhost.c
+++ b/programs/conhost/conhost.c
@@ -2674,6 +2674,14 @@ static int main_loop( struct console *console, HANDLE signal )
     return 0;
 }
 
+static LONG WINAPI handle_ctrl_c( EXCEPTION_POINTERS *eptr )
+{
+    if (eptr->ExceptionRecord->ExceptionCode != CONTROL_C_EXIT) return EXCEPTION_CONTINUE_SEARCH;
+    /* In Unix mode, ignore ctrl c exceptions. Signals are sent it to clients as well and we will
+     * terminate the usual way if they don't handle it. */
+    return EXCEPTION_CONTINUE_EXECUTION;
+}
+
 int __cdecl wmain(int argc, WCHAR *argv[])
 {
     int headless = 0, i, width = 0, height = 0;
@@ -2763,5 +2771,7 @@ int __cdecl wmain(int argc, WCHAR *argv[])
         ShowWindow( console.win, (si.dwFlags & STARTF_USESHOWWINDOW) ? si.wShowWindow : SW_SHOW );
     }
 
+    if (console.is_unix) RtlAddVectoredExceptionHandler( FALSE, handle_ctrl_c );
+
     return main_loop( &console, signal );
 }




More information about the wine-cvs mailing list