gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r15126 - gauger/web


From: gnunet
Subject: [GNUnet-SVN] r15126 - gauger/web
Date: Fri, 29 Apr 2011 18:33:50 +0200

Author: bartpolot
Date: 2011-04-29 18:33:50 +0200 (Fri, 29 Apr 2011)
New Revision: 15126

Modified:
   gauger/web/io.php
Log:
Added file locking to avoid concurrency problems


Modified: gauger/web/io.php
===================================================================
--- gauger/web/io.php   2011-04-29 13:34:36 UTC (rev 15125)
+++ gauger/web/io.php   2011-04-29 16:33:50 UTC (rev 15126)
@@ -81,11 +81,13 @@
     if(empty($host) || empty($counter)) return get_range_global();
     $f = @fopen("$DATADIR$host/$counter.dat", 'r');
     if ($f === false) return get_range_global();
+    flock($f, LOCK_SH);
     $b = false;
     while (($buffer = fgets($f, 512)) !== false) {
         if($b === false) {$b = explode(' ', $buffer); $b = $b[0]; }
         $e = $buffer;
     }
+    flock($f, LOCK_UN);
     fclose($f);
     $e = explode(' ', $e);
     $e = $e[0];
@@ -104,6 +106,7 @@
     global $DATADIR;
     $lm = false;
     $f = @fopen("$DATADIR$h/$g.dat", 'r');
+    flock($f, LOCK_SH);
     if ($f === false) return 1;
     while (($buffer = fgets($f, 512)) !== false) {
         $l = explode(' ', $buffer);
@@ -111,6 +114,7 @@
            if($lm === false || $l[1] > $lm) $lm = $l[1];
        }
     }
+    flock($f, LOCK_UN);
     fclose($f);
     return $lm ? $lm : 1;
 }
@@ -241,6 +245,7 @@
 function add_data_to_file($filename, $rev, $data) {
     $f = @fopen("$filename", 'r+');
     if ($f === false) return false;
+    flock($f, LOCK_EX);
     $size = filesize($filename);
 
     $pos = find_position($f, $size, $rev);
@@ -250,6 +255,7 @@
     fseek($f, $pos, SEEK_SET);
     fwrite($f, "$rev $data\n");
     fwrite($f, $buffer);
+    flock($f, LOCK_UN);
     fclose($f);
     return $pos;
 }
@@ -257,6 +263,7 @@
 function recalculate_data($filename, $rev, $pos) {
     $f = @fopen("$filename", 'r+');
     if ($f === false) return false;
+    flock($f, LOCK_SH);
     $size = filesize($filename);
     fseek($f, $pos, SEEK_SET);
     $r = get_line($f);
@@ -282,12 +289,15 @@
         $stddev += pow($avg - $val, 2);
     }
     $stddev = sqrt($stddev/$c);
+    flock($f, LOCK_UN);
+    fclose($f);
     return array($avg, $stddev);
 }
 
 function write_data_to_summary($filename, $rev, $data) {
     $f = @fopen("$filename.dat", 'r+');
     if ($f === false) return false;
+    flock($f, LOCK_EX);
     $size = filesize("$filename.dat");
     $pos = find_position($f, $size, $rev);
     fseek($f, $pos, SEEK_SET);
@@ -304,6 +314,7 @@
     fwrite($f, "$rev " . $data[0] . ' ' . $data[1] . "\n");
     fwrite($f, $rest);
     ftruncate($f, ftell($f));
+    flock($f, LOCK_UN);
     fclose($f);
     return true;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]