On 4/7/21 6:47 AM, ZheNing Hu wrote: > When we downloading with pacman. If we want to > stop downloading, use `Ctrl +C` can exit normally, > and "Interrupt signal received" will be print > on the terminal. But if we accidentally use > `Ctrl + \` to exit the download, it's not quite > so perfect. The program exits with a segment > fault, the database lock file was not deleted > in time. The next time we use pacman downloading, > the error will appear. > > So we can add signal handler with SIGQUIT, just > like we did with SIGINT and SIGHUP. This way the > user doesn't have to delete lock file manually.
The entire point of SIGQUIT is to let users kill a program in such a way that it produces a coredump. "You can think of this as a program error condition 'detected' by the user." I'm curious how one might accidentally do this. > Signed-off-by: ZheNing Hu <[email protected]> > --- > src/pacman/sighandler.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/src/pacman/sighandler.c b/src/pacman/sighandler.c > index ff54dce8..9fdbf917 100644 > --- a/src/pacman/sighandler.c > +++ b/src/pacman/sighandler.c > @@ -81,15 +81,18 @@ void install_soft_interrupt_handler(void) > new_action.sa_flags = SA_RESTART; > sigemptyset(&new_action.sa_mask); > sigaddset(&new_action.sa_mask, SIGINT); > + sigaddset(&new_action.sa_mask, SIGQUIT); > sigaddset(&new_action.sa_mask, SIGHUP); > > sigaction(SIGINT, &new_action, NULL); > + sigaction(SIGQUIT, &new_action, NULL); > sigaction(SIGHUP, &new_action, NULL); > } > > void remove_soft_interrupt_handler(void) > { > _reset_handler(SIGINT); > + _reset_handler(SIGQUIT); > _reset_handler(SIGHUP); > } > > -- Eli Schwartz Bug Wrangler and Trusted User
OpenPGP_signature
Description: OpenPGP digital signature
