[pacman-dev] [PATCH v2] pacman: Correct signal handler comment and refactor
Allan McRae
allan at archlinux.org
Mon Jun 23 06:18:39 EDT 2014
On 23/06/14 19:23, Silvan Jegen wrote:
> Hi
>
> On Mon, Jun 23, 2014 at 9:39 AM, Allan McRae <allan at archlinux.org> wrote:
>> On 21/06/14 18:18, Silvan Jegen wrote:
>>> One of the comments for this function is out of sync with the code.
>>> Since the code exhibits the more sane behavior of treating SIGINT and
>>> SIGHUB the same way (by not exiting pacman when there is a commit in
>>> flight) we adjust the comment.
>>>
>>> Given this code flow, the if/else statements can be simplified somewhat
>>> as well.
>>>
>>> Signed-off-by: Silvan Jegen <s.jegen at gmail.com>
>>
>> There is nothing I see correct about this patch.
>>
>>> ---
>>> src/pacman/pacman.c | 6 +++---
>>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
>>> index ef86d39..c0903ee 100644
>>> --- a/src/pacman/pacman.c
>>> +++ b/src/pacman/pacman.c
>>> @@ -301,7 +301,9 @@ 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) {
>>> + /* SIGINT/SIGHUP: no committing transaction, release it now and then exit pacman
>>
>> This comment makes little sense here. It was better where it was. See
>> below.
>>
>>> + * SIGTERM: release no matter what */
>>
>> This should stay where it was. See below.
>>
>>> + } else if(signum != SIGTERM) {
>>
>> So SIGQUIT is handled like SIGINT and SIGHUP?
>
> SIGQUIT is not handled by this function. See the handler setup at
> pacman.c: 1021-1037 .
>
My memory is bad...
>
>>> if(signum == SIGINT) {
>>> msg = "\nInterrupt signal received\n";
>>> } else {
>>> @@ -313,8 +315,6 @@ static void handler(int signum)
>>> return;
>>> }
>>> }
>>> - /* SIGINT: no committing transaction, release it now and then exit pacman
>>> - * SIGHUP, SIGTERM: release no matter what */
>>
>> Comments are correct. We get here with SIGINT or SIGHUP/SIGTERM only
>> when the transaction was not committing.
>
> SIGTERM releases *without* checking the return value of
> alpm_trans_interrupt (which checks for a committing transaction I
> assume). With SIGINT or SIGHUP alpm_trans_interrupt's return value
> *will* be checked. So SIGINT and SIGHUP are being handled the same
> way, contrary to the comment. That's why I suggest to adjust the
> comment and simplify the else/if somewhat.
Yes. Move SIGHUP please. I missed the comments were not moved verbatim.
> If you prefer, I can send a patch to correct the comment without
> moving it or changing the if/else logic (though I think nested "if"s
> checking for the same condition twice are ugly and unnecessary).
>
I'll accept the refactor now you have pointed out the lack of other
signal handling.
Thanks,
Allan
More information about the pacman-dev
mailing list