[Git][pacman/pacman][master] util: Flush cursor state to stdout before removing signal handler

Allan McRae (@allan) allan at archlinux.org
Fri Jul 22 00:21:15 UTC 2022



Allan McRae pushed to branch master at Pacman / Pacman


Commits:
ff7c6c8e by Chris Down at 2022-07-22T10:20:55+10:00
util: Flush cursor state to stdout before removing signal handler

It's possible that the cursor does not reappear after pressing ^C during
shutdown. In my case, I noticed this when pressing ^C after getting
results from `pacman -F` -- this can reasonably reliably be triggered by
issuing a file query and pressing ^C shortly after results are shown.

There are two reasons for this issue:

1. The graceful SIGINT handler is removed at the start of cleanup(), but
   the window from entering cleanup() to reaching exit() is non trivial.
   The main offender is FREELIST(pm_targets), which on my T14s takes
   >0.1s to execute. This means that if you are unlucky enough to press
   ^C while there, the cursor isn't coming back, because we haven't
   issued any command to show the cursor again yet, and the userspace
   signal handler is already blown away.
2. Moving console_cursor_show() to earlier in cleanup() only half solves
   the issue. While it's fine not to flush after _hiding_ the cursor,
   since it will at least make itself apparent before any other text
   reaches the screen, _showing_ the cursor must be followed by flushing
   stdout, because once the graceful SIGINT handler is gone, if you
   press ^C, no flush will be triggered (and thus there will be no
   cursor).

This fixes the issue by always starting out by showing the cursor again
at cleanup() time. This means that no matter where we get caught at ^C,
we will not end up leaving the terminal without its beloved ensign.

Signed-off-by: Chris Down <chris at chrisdown.name>
Signed-off-by: Allan McRae <allan at archlinux.org>

- - - - -


2 changed files:

- src/pacman/pacman.c
- src/pacman/util.c


View it on GitLab: https://gitlab.archlinux.org/pacman/pacman/-/commit/ff7c6c8e570bcf5e07876397af864adf8cbf2987

-- 
View it on GitLab: https://gitlab.archlinux.org/pacman/pacman/-/commit/ff7c6c8e570bcf5e07876397af864adf8cbf2987
You're receiving this email because of your account on gitlab.archlinux.org.




More information about the pacman-dev mailing list