From c634685ea51e5e405380f8975e2b9bf5869e4989 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 18 Aug 2022 19:46:07 +0100 Subject: [PATCH] prefork-interp: wip found Signed-off-by: Ian Jackson --- cprogs/prefork-interp.c | 7 +++++-- perl/Prefork.pm | 4 ++-- perl/prefork-interp-test | 16 ++++++++++++---- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/cprogs/prefork-interp.c b/cprogs/prefork-interp.c index f499a88..6c9a1ff 100644 --- a/cprogs/prefork-interp.c +++ b/cprogs/prefork-interp.c @@ -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; } diff --git a/perl/Prefork.pm b/perl/Prefork.pm index 10c7ec1..2869caf 100644 --- a/perl/Prefork.pm +++ b/perl/Prefork.pm @@ -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]; diff --git a/perl/prefork-interp-test b/perl/prefork-interp-test index 2111751..226a042 100755 --- a/perl/prefork-interp-test +++ b/perl/prefork-interp-test @@ -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 () { last unless m{\S}; -- 2.30.2