[pacman-dev] [PATCH 1/1] signhandler: add SIGQUIT soft_interrupt_handler

Eli Schwartz eschwartz at archlinux.org
Sun May 9 12:10:17 UTC 2021


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 <adlternative at gmail.com>
> ---
>  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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/pacman-dev/attachments/20210509/0efb179e/attachment.sig>


More information about the pacman-dev mailing list