Skip to content

Fix #21889, GHCi misbehaves with Ctrl-C on Windows

Zubin requested to merge wip/21889 into master

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:

  1. The hadrian wrappers generated using hadrian/bindist/cwrappers/version-wrapper.c call FreeConsole if the CPP flag INTERACTIVE_PROCESS is set, which is set when we are generating a wrapper for GHCi.

  2. The GHCi wrapper in driver/ghci/ calls the ghc-$VER.exe executable which is not wrapped rather than calling ghc.exe which is wrapped on windows (and usually non-interactive, so can't call FreeConsole:

    Before: ghci-VER.exe calls ghci.exe which calls ghc.exe which calls ghc-VER.exe

    After: ghci-VER.exe calls ghci.exe which calls ghc-VER.exe

Edited by Zubin

Merge request reports