From 3b20e71da5d7681c545d7588d7f1dc9238b167bf Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 1 Jan 2020 15:03:40 -0600 Subject: [PATCH] EPICS::IOC.pm Save parms, more debug annotations --- modules/database/src/tools/EPICS/IOC.pm | 25 +++++++++++++++++------- modules/database/test/std/rec/netget.plt | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/modules/database/src/tools/EPICS/IOC.pm b/modules/database/src/tools/EPICS/IOC.pm index 05c90b59c..611d906e6 100644 --- a/modules/database/src/tools/EPICS/IOC.pm +++ b/modules/database/src/tools/EPICS/IOC.pm @@ -210,17 +210,24 @@ undef value will be returned. sub _getline { my $self = shift; + my $pid = $self->pid; + return undef + unless $self->started; - my $line = readline $self->{stdout}; + # Save, could be closed by a timeout during readline + my $stdout = $self->{stdout}; + my $debug = $self->{debug}; + + my $line = readline $stdout; if (defined $line) { $line =~ s/[\r\n]+ $//x; # chomp broken on Windows? - printf "#%d >> %s\n", $self->{pid}, $line if $self->{debug}; + printf "#%d >> %s\n", $pid, $line if $debug; } - elsif (eof($self->{stdout})) { - printf "#%d >> \n", $self->{pid} if $self->{debug}; + elsif (eof($stdout)) { + printf "#%d >> \n", $pid if $debug; } else { - printf "#%d Error: %s\n", $self->{pid}, $! if $self->{debug}; + printf "#%d Error: %s\n", $pid, $! if $debug; } return $line; } @@ -362,6 +369,10 @@ sub close { return () unless $self->started; + my $pid = $self->{pid}; + my $debug = $self->{debug}; + + printf "#%d << \n", $pid if $debug; close $self->{stdin}; my @response = $self->_getlines; # No terminator @@ -370,8 +381,6 @@ sub close { $self->{select}->remove($self->{stderr}); close $self->{stderr}; - my $pid = $self->{pid}; - # Reset these before we call waitpid in case of timeout $self->{pid} = undef; $self->{stdin} = gensym; @@ -379,8 +388,10 @@ sub close { $self->{stderr} = gensym; if ($^O ne 'MSWin32') { + printf "#%d killing ... ", $pid if $debug; kill 'TERM', $pid; waitpid $pid, 0; + printf "%d dead.\n", $pid if $debug; } return @response; diff --git a/modules/database/test/std/rec/netget.plt b/modules/database/test/std/rec/netget.plt index 376057702..075717d78 100644 --- a/modules/database/test/std/rec/netget.plt +++ b/modules/database/test/std/rec/netget.plt @@ -98,8 +98,8 @@ $client->debug($debug); sub close_client { my $doing = shift; return sub { + diag("Timeout $doing"); $client->close; - fail("Timeout $doing"); } }