chiark / gitweb /
prefork-interp: improve protocol exchange error handling
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Aug 2022 23:39:15 +0000 (00:39 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 21 Aug 2022 20:21:10 +0000 (21:21 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
perl/Prefork.pm

index fb54a91d84297ad3e9bd6599993b851fd9e456db..1e3d9d77bd318e5eeadfca9217ac5d0a2a1bf770 100644 (file)
@@ -76,7 +76,7 @@ sub eintr_retry ($) {
 sub protocol_read_fail ($) {
   my ($what) = @_;
   _exit(0) if $!==ECONNRESET;
-  fail_log("recv $what: $!");
+  die("recv $what: $!");
 }
 
 sub protocol_exchange () {
@@ -104,12 +104,12 @@ sub protocol_exchange () {
   $r == $len or _exit(0);
 
   @ARGV = split /\0/, $data;
-  @ARGV >= 2 or fail_log("message data has too few strings");
-  length(pop(@ARGV)) and fail_log("message data missing trailing nul");
+  @ARGV >= 2 or die("message data has too few strings");
+  length(pop(@ARGV)) and die("message data missing trailing nul");
   %ENV = ();
   while (my $s = shift @ARGV) {
     last if !length $s;
-    $s =~ m/=/ or fail_log("message data env var missing equals");
+    $s =~ m/=/ or die("message data env var missing equals");
     $ENV{$`} = $';
   }
 }
@@ -206,7 +206,8 @@ sub initialisation_complete {
        if (!$child) {
          #---- monitor [1] ----
          close LISTEN;
-         protocol_exchange();
+         eval { protocol_exchange(); 1; }
+           or fail_log("protocol exchange failed: $@");
          return become_monitor();
        }
        close(CALL);