[pve-devel] r5153 - pve-common/trunk
svn-commits at proxmox.com
svn-commits at proxmox.com
Wed Sep 15 09:40:45 CEST 2010
Author: dietmar
Date: 2010-09-15 07:40:45 +0000 (Wed, 15 Sep 2010)
New Revision: 5153
Modified:
pve-common/trunk/RPCEnvironment.pm
Log:
cleanups
Modified: pve-common/trunk/RPCEnvironment.pm
===================================================================
--- pve-common/trunk/RPCEnvironment.pm 2010-09-15 07:24:56 UTC (rev 5152)
+++ pve-common/trunk/RPCEnvironment.pm 2010-09-15 07:40:45 UTC (rev 5153)
@@ -12,6 +12,41 @@
my $pve_env;
+# save $SIG{CHLD} handler implementation.
+# simply set $SIG{CHLD} = $worker_reaper;
+# and register forked processes with &$register_worker(pid)
+# Note: using $SIG{CHLD} = 'IGNORE' or $SIG{CHLD} = sub { wait (); } or ...
+# has serious side effects, because perls built in system() and open()
+# functions can't get the correct exit status of a child. So we cant use
+# that (also see perlipc)
+
+my $WORKER_PIDS;
+
+my $worker_reaper = sub {
+ local $!; local $?;
+ foreach my $pid (keys %$WORKER_PIDS) {
+ my $waitpid = waitpid ($pid, WNOHANG);
+ if (defined($waitpid) && ($waitpid == $pid)) {
+ delete ($WORKER_PIDS->{$pid});
+ }
+ }
+};
+
+my $register_worker = sub {
+ my $pid = shift;
+
+ return if !$pid;
+
+ # do not register if already finished
+ my $waitpid = waitpid ($pid, WNOHANG);
+ if (defined($waitpid) && ($waitpid == $pid)) {
+ delete ($WORKER_PIDS->{$pid});
+ return;
+ }
+
+ $WORKER_PIDS->{$pid} = 1;
+};
+
sub get {
die "not initialized" if !$pve_env;
@@ -28,7 +63,7 @@
die "unknown environment type" if !$type || $type !~ m/^(cli|pub|priv)$/;
- $SIG{CHLD} = &worker_reaper;
+ $SIG{CHLD} = $worker_reaper;
# environment types
# cli ... command started fron command line
@@ -134,41 +169,6 @@
return "UPID:$d->{pid}-$d->{pstart}:$d->{starttime}:$d->{type}:$d->{data}";
}
-# save $SIG{CHLD} handler implementation.
-# simply set $SIG{CHLD} = &worker_reaper;
-# and register forked processes with register_worker(pid)
-# Note: using $SIG{CHLD} = 'IGNORE' or $SIG{CHLD} = sub { wait (); } or ...
-# has serious side effects, because perls built in system() and open()
-# functions can't get the correct exit status of a child. So we cant use
-# that (also see perlipc)
-
-my $WORKER_PIDS;
-
-sub worker_reaper {
- local $!; local $?;
- foreach my $pid (keys %$WORKER_PIDS) {
- my $waitpid = waitpid ($pid, WNOHANG);
- if (defined($waitpid) && ($waitpid == $pid)) {
- delete ($WORKER_PIDS->{$pid});
- }
- }
-}
-
-sub register_worker {
- my $pid = shift;
-
- return if !$pid;
-
- # do not register if already finished
- my $waitpid = waitpid ($pid, WNOHANG);
- if (defined($waitpid) && ($waitpid == $pid)) {
- delete ($WORKER_PIDS->{$pid});
- return;
- }
-
- $WORKER_PIDS->{$pid} = 1;
-}
-
# start long running workers
# $data append to the returned uniquely identifier, which
# has the following format: "UPID:$pid-$pstart:$startime:$dtype:$data"
@@ -178,7 +178,7 @@
# is writing it
sub fork_worker {
- my ($dtype, $data, $function) = @_;
+ my ($self, $dtype, $data, $function) = @_;
my $cpid;
@@ -309,7 +309,7 @@
syslog ('err', "got strange upid - $upid\n");
}
- register_worker ($cpid);
+ &$register_worker($cpid);
return $upid;
}
More information about the pve-devel
mailing list