win32: more break-handling repairs
This commit is contained in:
parent
9702e7c6d3
commit
dd2dd733c0
|
@ -105,6 +105,7 @@ static HWND console_hwnd;
|
||||||
static int has_stdio, stdio_kills_prog;
|
static int has_stdio, stdio_kills_prog;
|
||||||
static HANDLE waiting_sema;
|
static HANDLE waiting_sema;
|
||||||
static void *orig_signal_handle;
|
static void *orig_signal_handle;
|
||||||
|
static void *orig_break_handle;
|
||||||
|
|
||||||
typedef HWND (WINAPI* gcw_proc)();
|
typedef HWND (WINAPI* gcw_proc)();
|
||||||
|
|
||||||
|
@ -122,7 +123,7 @@ static BOOL WINAPI ConsoleHandler(DWORD op)
|
||||||
if (stdio_kills_prog) {
|
if (stdio_kills_prog) {
|
||||||
ReleaseSemaphore(waiting_sema, 1, NULL);
|
ReleaseSemaphore(waiting_sema, 1, NULL);
|
||||||
} else {
|
} else {
|
||||||
scheme_break_main_thread();
|
scheme_break_main_thread_at(orig_break_handle);
|
||||||
scheme_signal_received_at(orig_signal_handle);
|
scheme_signal_received_at(orig_signal_handle);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -164,6 +165,7 @@ static void MrEdSchemeMessages(char *msg, ...)
|
||||||
has_stdio = 1;
|
has_stdio = 1;
|
||||||
waiting_sema = CreateSemaphore(NULL, 0, 1, NULL);
|
waiting_sema = CreateSemaphore(NULL, 0, 1, NULL);
|
||||||
orig_signal_handle = scheme_get_signal_handle();
|
orig_signal_handle = scheme_get_signal_handle();
|
||||||
|
orig_break_handle = scheme_get_main_thread_break_handle();
|
||||||
SetConsoleCtrlHandler(ConsoleHandler, TRUE);
|
SetConsoleCtrlHandler(ConsoleHandler, TRUE);
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -168,11 +168,13 @@ extern Scheme_Object *scheme_initialize(Scheme_Env *env);
|
||||||
/* ctl-C handler */
|
/* ctl-C handler */
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
|
||||||
#ifndef NO_USER_BREAK_HANDLER
|
#if !defined(NO_USER_BREAK_HANDLER) || defined(DOS_FILE_SYSTEM)
|
||||||
|
|
||||||
static void *break_handle;
|
static void *break_handle;
|
||||||
static void *signal_handle;
|
static void *signal_handle;
|
||||||
|
|
||||||
|
# ifndef NO_USER_BREAK_HANDLER
|
||||||
|
|
||||||
static void user_break_hit(int ignore)
|
static void user_break_hit(int ignore)
|
||||||
{
|
{
|
||||||
scheme_break_main_thread_at(break_handle);
|
scheme_break_main_thread_at(break_handle);
|
||||||
|
@ -189,6 +191,17 @@ static void user_break_hit(int ignore)
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# ifdef DOS_FILE_SYSTEM
|
||||||
|
static BOOL WINAPI ConsoleBreakHandler(DWORD op)
|
||||||
|
{
|
||||||
|
scheme_break_main_thread_at(break_handle);
|
||||||
|
scheme_signal_received_at(signal_handle);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*========================================================================*/
|
/*========================================================================*/
|
||||||
|
@ -314,10 +327,15 @@ static int main_after_stack(void *data)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_USER_BREAK_HANDLER
|
#if !defined(NO_USER_BREAK_HANDLER) || defined(DOS_FILE_SYSTEM)
|
||||||
break_handle = scheme_get_main_thread_break_handle();
|
break_handle = scheme_get_main_thread_break_handle();
|
||||||
signal_handle = scheme_get_signal_handle();
|
signal_handle = scheme_get_signal_handle();
|
||||||
|
# ifndef NO_USER_BREAK_HANDLER
|
||||||
MZ_SIGSET(SIGINT, user_break_hit);
|
MZ_SIGSET(SIGINT, user_break_hit);
|
||||||
|
# endif
|
||||||
|
# ifdef DOS_FILE_SYSTEM
|
||||||
|
SetConsoleCtrlHandler(ConsoleBreakHandler, TRUE);
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rval = run_from_cmd_line(argc, argv, scheme_basic_env, cont_run);
|
rval = run_from_cmd_line(argc, argv, scheme_basic_env, cont_run);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user