[pacman-dev] [PATCH] pacman: Correct signal handler behavior

Andrew Gregory andrew.gregory.8 at gmail.com
Fri Jun 20 17:12:10 EDT 2014


On 06/20/14 at 10:00pm, Silvan Jegen wrote:
> One of the comments for this function is out of sync with the code.
> If a SIGHUP is received the code calls the release function only if
> there is no transaction in flight (contrary to the comments).
> 
> This change brings the code in line with the comment (and moves the
> comment for readability). Additionally, it changes the exit message
> to reflect the fact that the signal received was either a SIGHUP or
> a SIGTERM.
> 
> Signed-off-by: Silvan Jegen <s.jegen at gmail.com>
> ---
>  src/pacman/pacman.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)

I think the comment is just a typo.  According to its commit message,
SIGHUP and SIGINT should be treated the same.  SIGHUP seems like
a poor reason to kill an active transaction rather than more
gracefully interrupt it.

apg

> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index ef86d39..599a141 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -301,20 +301,20 @@ static void handler(int signum)
>  			"Please submit a full bug report with --debug if appropriate.\n";
>  		xwrite(err, msg, strlen(msg));
>  		exit(signum);
> -	} else if(signum == SIGINT || signum == SIGHUP) {
> -		if(signum == SIGINT) {
> -			msg = "\nInterrupt signal received\n";
> -		} else {
> -			msg = "\nHangup signal received\n";
> -		}
> -		xwrite(err, msg, strlen(msg));
> +	}
> +	/* SIGINT: no committing transaction, release it now and then exit pacman
> +	 * SIGHUP, SIGTERM: release no matter what */
> +	if(signum == SIGINT) {
> +		msg = "\nInterrupt signal received\n";
>  		if(alpm_trans_interrupt(config->handle) == 0) {
>  			/* a transaction is being interrupted, don't exit pacman yet. */
>  			return;
>  		}
> +	} else {
> +		msg = "\nHangup/Termination signal received\n";
>  	}
> -	/* SIGINT: no committing transaction, release it now and then exit pacman
> -	 * SIGHUP, SIGTERM: release no matter what */
> +
> +	xwrite(err, msg, strlen(msg));
>  	alpm_trans_release(config->handle);
>  	/* output a newline to be sure we clear any line we may be on */
>  	xwrite(out, "\n", 1);
> -- 
> 2.0.0


More information about the pacman-dev mailing list