chiark / gitweb /
prefork-interp: wip found
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 18 Aug 2022 18:46:07 +0000 (19:46 +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>
cprogs/prefork-interp.c
perl/Prefork.pm
perl/prefork-interp-test

index f499a882c3e9d8716613508c80e2d07be76a17b0..6c9a1ff5343451d1600ffedc034fcd034acaf10c 100644 (file)
@@ -264,7 +264,9 @@ static void send_request(void) {
   assert(p == m + len + 4);
 
   ssize_t sr = fwrite(p, len, 1, call_sock);
-  if (sr != 1) diee("write request");
+  if (sr != 1) diee("write request (buffer)");
+
+  if (fflush(call_sock)) diee("write request");
 }
 
 static FILE *call_sock_from_fd(int fd) {
@@ -285,10 +287,11 @@ static bool was_eof(FILE *call_sock) {
 
 // Returns -1 on EOF
 static int protocol_read_maybe(void *data, size_t sz) {
+  if (!sz) return 0;
   size_t sr = fread(data, sz, 1, call_sock);
   if (sr != 1) {
     if (was_eof(call_sock)) return -1;
-    diee("read() on monitor call socket");
+    diee("read() on monitor call socket (%zd)", sz);
   }
   return 0;
 }
index 10c7ec1a70d7b477300285b990ec9b7111136136..2869caf4387c535cef068246eaecfee4e69e756e 100644 (file)
@@ -115,7 +115,7 @@ sub protocol_exchange () {
   $r == $len or _exit(0);
 
   @ARGV = split /\0/, $data;
-  @ARGV >= 2 or die("message data has too few strings");
+  @ARGV >= 2 or die("message data has too few strings (".(scalar @ARGV).")");
   length(pop(@ARGV)) and die("message data missing trailing nul");
   %ENV = ();
   while (my $s = shift @ARGV) {
@@ -134,7 +134,7 @@ sub initialisation_complete {
   my (@vsns) = split /,/, $env_data[0];
   croak "$env_name doesn't offer protocol v1" unless grep { $_ eq 'v1' } @vsns;
   my @env_fds = split /,/, $env_data[1];
-  croak "$env_name has too few fds" unless @env_fds >= 3;;
+  croak "$env_name has too few fds" unless @env_fds >= 2;;
   $#env_fds = 1;
   $socket_path = $env_data[2];
 
index 2111751185a905a84b5548832cd2d22e4e9134d8..226a042ce59b1b20abdf1110243a76cd986b71c0 100755 (executable)
@@ -1,16 +1,24 @@
 #!/usr/bin/prefork-interp perl
+# -*- perl -*-
 
 use strict;
 BEGIN { unshift @INC, '.' }
 use Proc::Prefork;
 
-print STDERR "BEGIN - STDERR - @ARGV\n" and flush STDERR or die $!;
-print STDOUT "BEGIN - STDOUT - @ARGV\n" and flush STDOUT or die $!;
+sub prwhen ($) {
+  my ($when) = @_;
+  my @env = sort keys %ENV;
+  print STDERR "$when - STDERR - @ARGV - $ENV{PREFORK_INTERP} - @env"
+    and flush STDERR or die $!;
+  print STDOUT "$when - STDOUT\n"
+    and flush STDOUT or die $!;
+}
+
+prwhen('BEGIN');
 
 initialisation_complete();
 
-print STDERR "AFTER - STDERR - @ARGV\n" and flush STDERR or die $!;
-print STDOUT "AFTER - STDOUT - @ARGV\n" and flush STDOUT or die $!;
+prwhen('AFTER');
 
 while (<STDIN>) {
   last unless m{\S};