From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 7B7A01F565 for ; Fri, 22 Sep 2023 21:13:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1695417196; bh=hB818Ag9oODvuw7Suipjf+eYo3kzBcx8HlORKdKqJik=; h=From:To:Subject:Date:In-Reply-To:References:From; b=qvSAB4+IvVDZf7ea9Kia4d5EfLQ+Gij+YMmGXLiIdVcpYeH2zahJkvCCh/b9QEP0a 6SUywPwsbqqtCwgnqPzuIXwGOHWPoNFKqqnv4dc/Pk7YAyEfwqJcRw255oAts43D+0 WcDglW3EVt2zilKe1OawDG4ajrlaemOqkGC+6SvY= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/4] lei: improve ->fail internal API Date: Fri, 22 Sep 2023 21:13:14 +0000 Message-ID: <20230922211316.3060039-3-e@80x24.org> In-Reply-To: <20230922211316.3060039-1-e@80x24.org> References: <20230922211316.3060039-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Allow the exit code to be the first argument intead of the last to match our ->child_error, as well as the BSD err(3) API. We'll also avoid shifting user-passed exit codes so $? can be passed as-is without losing signal information. --- lib/PublicInbox/LEI.pm | 19 ++++++++++++------- lib/PublicInbox/LeiToMail.pm | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index c61ce76d..368f9357 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -29,6 +29,7 @@ use File::Path (); use File::Spec; use Carp (); use Sys::Syslog qw(openlog syslog closelog); +use Scalar::Util qw(looks_like_number); our $quit = \&CORE::exit; our ($current_lei, $errors_log, $listener, $oldset, $dir_idle); my $GLP = Getopt::Long::Parser->new; @@ -518,13 +519,17 @@ sub sigpipe_handler { # handles SIGPIPE from @WQ_KEYS workers fail_handler($_[0], 13, delete $_[0]->{1}); } -sub fail ($$;$) { - my ($self, $msg, $exit_code) = @_; - local $current_lei = $self; - $self->{failed}++; - warn(substr($msg, -1, 1) eq "\n" ? $msg : "$msg\n") if defined $msg; - $self->{pkt_op_p}->pkt_do('fail_handler') if $self->{pkt_op_p}; - x_it($self, ($exit_code // 1) << 8); +sub fail ($;@) { + my ($lei, @msg) = @_; + my $exit_code = looks_like_number($msg[0]) ? shift(@msg) : undef; + local $current_lei = $lei; + $lei->{failed}++; + if (@msg) { + push @msg, "\n" if substr($msg[-1], -1, 1); + warn @msg; + } + $lei->{pkt_op_p}->pkt_do('fail_handler') if $lei->{pkt_op_p}; + x_it($lei, $exit_code // (1 << 8)); undef; } diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index e357ee00..7c7967c8 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -154,7 +154,7 @@ sub reap_compress { # awaitpid callback my ($pid, $lei) = @_; my $cmd = delete $lei->{"pid.$pid"}; return if $? == 0; - $lei->fail("@$cmd failed", $? >> 8); + $lei->fail($?, "@$cmd failed"); } sub _post_augment_mbox { # open a compressor process from top-level process