mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 23:06:37 +00:00
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
This commit is contained in:
parent
bb7318d488
commit
65c5f8a53e
@ -7,6 +7,7 @@ package main;
|
|||||||
sub TestBlocking() { BlockingCall("DoSleep", 5, "SleepDone", 8); }
|
sub TestBlocking() { BlockingCall("DoSleep", 5, "SleepDone", 8); }
|
||||||
sub DoSleep($) { sleep(shift); return "I'm done"; }
|
sub DoSleep($) { sleep(shift); return "I'm done"; }
|
||||||
sub SleepDone($) { Log 1, "SleepDone: " . shift; }
|
sub SleepDone($) { Log 1, "SleepDone: " . shift; }
|
||||||
|
sub TestBlocking2() { BlockingCall("DoSleep", 5, "SleepDone", 2); }
|
||||||
=cut
|
=cut
|
||||||
|
|
||||||
|
|
||||||
@ -68,8 +69,10 @@ BlockingCall($$@)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($pid) {
|
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;
|
return $pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,9 +123,16 @@ BlockingInformParent($;$$)
|
|||||||
sub
|
sub
|
||||||
BlockingKill($)
|
BlockingKill($)
|
||||||
{
|
{
|
||||||
my $pid = shift;
|
my $h = shift;
|
||||||
if($^O !~ m/Win/) {
|
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";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user