]> git.donarmstrong.com Git - infobot.git/commitdiff
* Merge Don's patch - Don't open shm segments if a read fails
authordjmcgrath <djmcgrath@c11ca15a-4712-0410-83d8-924469b57eb5>
Fri, 19 Oct 2007 12:00:34 +0000 (12:00 +0000)
committerdjmcgrath <djmcgrath@c11ca15a-4712-0410-83d8-924469b57eb5>
Fri, 19 Oct 2007 12:00:34 +0000 (12:00 +0000)
git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk@1577 c11ca15a-4712-0410-83d8-924469b57eb5

src/Shm.pl

index 170811b7d3ed85897b1e3c8a53c219fda316be24..63272a6e53b4b9b23f13541ac4575a6c3dba32e0 100644 (file)
@@ -9,6 +9,8 @@
 
 use POSIX qw(_exit);
 
+my %shm_keys;
+
 sub openSHM {
     my $IPC_PRIVATE = 0;
     my $size = 2000;
@@ -20,6 +22,10 @@ sub openSHM {
 
     if (defined( $_ = shmget($IPC_PRIVATE, $size, 0777) )) {
        &status("Created shared memory (shm) key: [$_]");
+       $shm_keys{$_} = {time     => time,
+                        accessed => 0,
+                        key      => $_,
+                       };
        return $_;
     } else {
        &ERROR("openSHM: failed.");
@@ -52,8 +58,12 @@ sub shmRead {
        return $retval;
     } else {
        &ERROR("shmRead: failed: $!");
+       if (exists $shm_keys{$_}) {
+             closeSHM($key);
+       }
        ### TODO: if this fails, never try again.
-       &openSHM();
+       # What use is opening a SHM segment if we're not going to read it?
+       # &openSHM();
        return '';
     }
 }
@@ -65,6 +75,8 @@ sub shmWrite {
 
     return if (&IsParam('noSHM'));
 
+    $shm_keys{$keys}{accessed} = 1;
+
     if (length($str) > $size) {
        &status("ERROR: length(str) (..)>$size...");
        return;