Using threads->exit() for Windows

git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@2648 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig
2013-02-05 08:25:20 +00:00
parent b1af287166
commit c943edb088

View File

@@ -15,6 +15,8 @@ use warnings;
use IO::Socket::INET; use IO::Socket::INET;
sub BlockingCall($$@); sub BlockingCall($$@);
sub BlockingExit($);
sub BlockingKill($);
sub sub
BlockingCall($$@) BlockingCall($$@)
@@ -38,7 +40,7 @@ BlockingCall($$@)
my $ret = &{$blockingFn}($arg); my $ret = &{$blockingFn}($arg);
use strict "refs"; use strict "refs";
exit(0) if(!$finishFn); BlockingExit(undef) if(!$finishFn);
# Look for the telnetport # Look for the telnetport
my $tp; my $tp;
@@ -53,7 +55,7 @@ BlockingCall($$@)
if(!$tp) { if(!$tp) {
Log 1, "CallBlockingFn: No telnet port found for sending the data back."; Log 1, "CallBlockingFn: No telnet port found for sending the data back.";
exit(0); BlockingExit(undef);
} }
# Write the data back, calling the function # Write the data back, calling the function
@@ -62,7 +64,7 @@ BlockingCall($$@)
Log 1, "CallBlockingFn: Can't connect to $addr\n" if(!$client); Log 1, "CallBlockingFn: Can't connect to $addr\n" if(!$client);
$ret =~ s/'/\\'/g; $ret =~ s/'/\\'/g;
syswrite($client, "{$finishFn('$ret')}\n"); syswrite($client, "{$finishFn('$ret')}\n");
exit(0); BlockingExit($client);
} }
sub sub
@@ -72,5 +74,20 @@ BlockingKill($)
Log 1, "Terminated $pid" if($pid && kill(9, $pid)); Log 1, "Terminated $pid" if($pid && kill(9, $pid));
} }
sub
BlockingExit($)
{
my $client = shift;
if($^O =~ m/Win/) {
close($client) if($client);
threads->exit();
} else {
exit(0);
}
}
1; 1;