From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [OSSTEST PATCH] TestSupport: use timeout(1) Date: Mon, 8 Dec 2014 14:16:37 +0000 Message-ID: <1418048197.2827.11.camel@citrix.com> References: <1418047685-27801-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Xxz7C-0002mU-JZ for xen-devel@lists.xenproject.org; Mon, 08 Dec 2014 14:16:42 +0000 In-Reply-To: <1418047685-27801-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Jackson Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org On Mon, 2014-12-08 at 14:08 +0000, Ian Jackson wrote: > If a command we run times out, the machinery in tcmdex() will arrange > for the ts-* script to spot the timeout, and stop waiting for it. > > However it is also necessary for the command we ran to die. It has a > copy of the owner daemon fd, so if it doesn't, our resources won't get > freed. In sufficiently exciting bugs, our allocation might continue > indefinitely, while a subprocess of ours hangs on after we are long > gone. > > timeout(1) does not print a message when the process times out (!) So > we can't do away with the logic in tcmdex(). I think you mean s/tcmdex/cmd/ in a few places here, since cmd() is where all the existing timeout stuff is. > We set the timeout(1) > timeout to 30s more than our own timeout, so that tcmdex() will time > out first and print a message. > > We could use alarm(1) as we do in Osstest/Serial/sympathy.pm but that > program isn't packaged and its unsophisticated approach is not really > appropriate for arbitrary nonconsenting programs. > > Signed-off-by: Ian Jackson Apart from that niggle: Acked-by: Ian Campbell > --- > Osstest/TestSupport.pm | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm > index a3b6936..ca680c0 100644 > --- a/Osstest/TestSupport.pm > +++ b/Osstest/TestSupport.pm > @@ -388,7 +388,10 @@ sub sshopts () { > sub tcmdex { > my ($timeout,$stdout,$cmd,$optsref,@args) = @_; > logm("executing $cmd ... @args"); > - my $r= cmd($timeout,$stdout, $cmd,@$optsref,@args); > + # We use timeout(1) as a backstop, in case $cmd doesn't die. We > + # need $cmd to die because we won't release the resources we own > + # until all of our children are dead. > + my $r= cmd($timeout,$stdout, 'timeout',$timeout+30, $cmd,@$optsref,@args); > $r and die "status $r"; > } >