return $retval;
} else {
&ERROR("shmRead: failed: $!");
+ ### TODO: if this fails, never try again.
+ &openSHM();
return '';
}
}
if ($str !~ /^$/) {
my $read = &shmRead($key);
$read =~ s/\0+//g;
- $str = $read ."||". $str if ($read ne "");
+
+ if ($str eq "") {
+ $str = time().": "; # time stamping, null.
+ } elsif ($read eq "") {
+ $str = time().": "; # timestamping.
+ } else {
+ $str = $read ."||". $str;
+ }
}
if (!shmwrite($key,$str,$position,$size)) {
return 0;
}
- &DEBUG("forked => ".scalar(keys %forked) );
-
foreach (keys %forked) {
my $time = time() - $forked{$_}{Time};
next unless ($time > $forker_timeout);
$count++;
}
- if (exists $forked{$name}) {
+ if (exists $forked{$name} and !scalar keys %{ $forked{$name} }) {
+ &WARN("addF: forked{$name} exists but is empty; deleting.");
+ undef $forked{$name};
+ }
+
+ if (exists $forked{$name} and scalar keys %{ $forked{$name} }) {
my $time = $forked{$name}{Time};
my $continue = 0;
- if (-d "/proc/$forked{$name}{PID}") {
+ &DEBUG("PID => $forked{$name}{PID}");
+
+ if ( -d "/proc/$forked{$name}{PID}") {
&status("fork: still running; good. BAIL OUT.");
+ return 0;
} else {
&WARN("Found dead fork; removing and resetting.");
$continue = 1;
}
$forked{$name}{Time} = time();
+ $forked{$name}{PID} = $$;
$forkedtime = time();
$count{'Fork'}++;
return 1;
POSIX::_exit(0);
}
+ if ($name =~ /\.pl/) {
+ &WARN("dF: name is name of source file ($name). FIX IT!");
+ }
+
&showProc(); # just for informational purposes.
if (exists $forked{$name}) {