• Jeff King's avatar
    pager: do wait_for_pager on signal death · a3da8821
    Jeff King authored
    Since ea27a18c (spawn pager via run_command interface), the
    original git process actually does git work, and the pager
    is a child process (actually, on Windows it has always been
    that way, since Windows lacks fork). After spawning the
    pager, we register an atexit() handler that waits for the
    pager to finish.
    Unfortunately, that handler does not always run. In
    particular, if git is killed by a signal, then we exit
    immediately. The calling shell then thinks that git is done;
    however, the pager is still trying to run and impact the
    terminal. The result can be seen by running a long git
    process with a pager (e.g., "git log -p") and hitting ^C.
    Depending on your config, you should see the shell prompt,
    but pressing a key causes the pager to do any terminal
    de-initialization sequence.
    This patch just intercepts any death-dealing signals and
    waits for the pager before dying. Under typical less
    configuration, that means hitting ^C will cause git to stop
    generating output, but the pager will keep running.
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
pager.c 1.86 KB