From: djmcgrath Date: Fri, 19 Oct 2007 12:00:34 +0000 (+0000) Subject: * Merge Don's patch - Don't open shm segments if a read fails X-Git-Url: https://git.donarmstrong.com/?p=infobot.git;a=commitdiff_plain;h=9e6754786222723613dbf461e4c54b86a7b26826 * Merge Don's patch - Don't open shm segments if a read fails git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk@1577 c11ca15a-4712-0410-83d8-924469b57eb5 --- diff --git a/src/Shm.pl b/src/Shm.pl index 170811b..63272a6 100644 --- a/src/Shm.pl +++ b/src/Shm.pl @@ -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;