Fix #21889, GHCi misbehaves with Ctrl-C on Windows
Fix #21889 (closed), GHCi misbehaves with Ctrl-C on Windows
On Windows, we create multiple levels of wrappers for GHCi which ultimately execute
ghc --interactive
. In order to handle console events properly, each of these wrappers
must call FreeConsole()
in order to hand off event processing to the child process. See #14150 (closed)
In addition to this, FreeConsole
must only be called from interactive processes (#13411 (closed)).
This commit makes two changes to fix this situation:
-
The hadrian wrappers generated using
hadrian/bindist/cwrappers/version-wrapper.c
callFreeConsole
if the CPP flag INTERACTIVE_PROCESS is set, which is set when we are generating a wrapper for GHCi. -
The GHCi wrapper in
driver/ghci/
calls theghc-$VER.exe
executable which is not wrapped rather than callingghc.exe
which is wrapped on windows (and usually non-interactive, so can't callFreeConsole
:Before: ghci-
VER.exe calls ghci.exe which calls ghc.exe which calls ghc-
VER.exeAfter: ghci-
VER.exe calls ghci.exe which calls ghc-
VER.exe