]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Shm.pl
- if a forked process "died", forked{}{PID} somehow became $$ - fixed.
[infobot.git] / src / Shm.pl
index 084395865f2851d20ec39d6124cfd45e130046b6..b9756bce3676b6e42d0e778fb9b1dddd73e60491 100644 (file)
@@ -44,6 +44,8 @@ sub shmRead {
        return $retval;
     } else {
        &ERROR("shmRead: failed: $!");
+       ### TODO: if this fails, never try again.
+       &openSHM();
        return '';
     }
 }
@@ -58,7 +60,14 @@ sub shmWrite {
     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)) {
@@ -108,12 +117,22 @@ sub addForked {
        $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}") {
+       $continue++ if ($forked{$name}{PID} == $$);
+
+       if ($continue) {
+           &DEBUG("hrm.. fork pid == mypid == $$; how did this happen?");
+       } elsif ( -d "/proc/$forked{$name}{PID}") {
            &status("fork: still running; good. BAIL OUT.");
+           return 0;
        } else {
            &WARN("Found dead fork; removing and resetting.");
            $continue = 1;
@@ -130,6 +149,7 @@ sub addForked {
     }
 
     $forked{$name}{Time}       = time();
+    $forked{$name}{PID}                = $$;
     $forkedtime                        = time();
     $count{'Fork'}++;
     return 1;
@@ -145,6 +165,10 @@ sub delForked {
        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}) {