]> git.donarmstrong.com Git - infobot.git/blobdiff - src/Shm.pl
- forgot to set forked{}{PID} in addForked
[infobot.git] / src / Shm.pl
index 5fca753d55cd01fef11fb5118ba5fea36bfea503..8d6e5a3882564f546d96305ae0dd80e2bc9827a9 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)) {
@@ -92,7 +101,7 @@ sub addForked {
     }
 
     my $count = 0;
-    while (scalar keys %forked > 2) {  # 2 or more == fail.
+    while (scalar keys %forked > 1) {  # 2 or more == fail.
        sleep 1;
 
        if ($count > 3) {       # 3 seconds.
@@ -108,12 +117,20 @@ 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}") {
+       &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;
@@ -130,6 +147,7 @@ sub addForked {
     }
 
     $forked{$name}{Time}       = time();
+    $forked{$name}{PID}                = $$;
     $forkedtime                        = time();
     $count{'Fork'}++;
     return 1;
@@ -145,6 +163,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}) {