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

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to