From 65c5f8a53eec30ffe5e083a42c64f9faf8a5db5d Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Fri, 22 Mar 2013 16:37:36 +0000 Subject: [PATCH] Calling finishFn when terminating a process. Be more verbose when terminating. git-svn-id: https://svn.fhem.de/fhem/trunk@2966 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/Blocking.pm | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/fhem/FHEM/Blocking.pm b/fhem/FHEM/Blocking.pm index 39844c27f..d55fac9d9 100644 --- a/fhem/FHEM/Blocking.pm +++ b/fhem/FHEM/Blocking.pm @@ -7,6 +7,7 @@ package main; sub TestBlocking() { BlockingCall("DoSleep", 5, "SleepDone", 8); } sub DoSleep($) { sleep(shift); return "I'm done"; } sub SleepDone($) { Log 1, "SleepDone: " . shift; } +sub TestBlocking2() { BlockingCall("DoSleep", 5, "SleepDone", 2); } =cut @@ -68,8 +69,10 @@ BlockingCall($$@) } if($pid) { - InternalTimer(gettimeofday()+$timeout, "BlockingKill", $pid, 0) - if($timeout); + if($timeout) { + my %h = ( pid=>$pid, fn=>$blockingFn, finishFn=>$finishFn ); + InternalTimer(gettimeofday()+$timeout, "BlockingKill", \%h, 0); + } return $pid; } @@ -120,9 +123,16 @@ BlockingInformParent($;$$) sub BlockingKill($) { - my $pid = shift; + my $h = shift; if($^O !~ m/Win/) { - Log 1, "Terminated $pid" if($pid && kill(9, $pid)); + if($h->{pid} && kill(9, $h->{pid})) { + Log 1, "Timeout for $h->{fn} reached, terminated process $h->{pid}"; + if($h->{finishFn}) { + no strict "refs"; + my $ret = &{$h->{finishFn}}(); + use strict "refs"; + } + } } }