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

Silvan Jegen s.jegen at gmail.com
Fri Jun 20 18:08:25 EDT 2014


On Fri, Jun 20, 2014 at 05:12:10PM -0400, Andrew Gregory wrote:
> 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.

I tend to agree.

Should I send a patch to change the comment accordingly (and maybe move
it before the "else if(signum == SIGINT || signum == SIGHUP) {" in the
original code)?

> 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