1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-29 19:30:36 +02:00

Install 'mingw_take_signal' on MinGW.

After installing a signal handler, these are handled

    * C-c
    * kill -SIGINT <guile.exe-pid> (the wine process) works

these result in a direct terminate (or kill even?)

    - kill <guile.exe-pid>
    - wine cmd /c guile -c '(kill <guile-exe.pid> SIGINT)'
    - wine cmd /c guile -c '(kill <guile-exe.pid> SIGTERM)'

* libguile/scmsigs.c (mingw_take_signal)[__MINGW32__]: New function.
install_mingw_take_signal)[__MINGW32__]: New function.
(scm_init_scmsigs)[__MINGW32__]: Use it.
This commit is contained in:
Jan (janneke) Nieuwenhuizen 2020-10-30 13:32:00 +01:00 committed by Michael Gran
parent b55397ea5d
commit eaa38d6381

View file

@ -42,6 +42,11 @@
#include <full-write.h>
#ifdef __MINGW32__
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
#endif
#include "async.h"
#include "boolean.h"
#include "dynwind.h"
@ -363,6 +368,30 @@ scm_i_signals_post_fork ()
scm_i_ensure_signal_delivery_thread ();
}
#ifdef __MINGW32__
static BOOL
mingw_take_signal (DWORD ctrl_signal)
{
switch (ctrl_signal)
{
case CTRL_C_EVENT:
take_signal (SIGINT);
break;
case CTRL_BREAK_EVENT:
take_signal (SIGTERM);
break;
}
return TRUE;
}
static void
install_mingw_take_signal ()
{
SetConsoleCtrlHandler ((PHANDLER_ROUTINE) mingw_take_signal, TRUE);
}
#endif /* __MINGW32__ */
static void
install_handler (int signum, SCM thread, SCM handler)
{
@ -848,6 +877,10 @@ scm_init_scmsigs ()
#endif
}
#ifdef __MINGW32__
install_mingw_take_signal ();
#endif
scm_c_define ("NSIG", scm_from_long (NSIG));
scm_c_define ("SIG_IGN", scm_from_intptr_t ((intptr_t) SIG_IGN));
scm_c_define ("SIG_DFL", scm_from_intptr_t ((intptr_t) SIG_DFL));