note 61921 modified in function.flock by danbrown

From: Date: Mon, 18 May 2009 00:39:38 +0000
Subject: note 61921 modified in function.flock by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-155407@lists.php.net to get a copy of this message
I ran into a loop because I just checked for true (= you got the lock) as return value of flock() and tried again when I got a false. <?php function naive_wait_for_file($fp) { while (true) { if (flock($fp, LOCK_EX)) { return; } $k = rand(0, 20); usleep(round($k * 10000)); # k * 10ms } } ?> Unfortunately in one case the $fp I put in was invalid, so I always got false and got stuck. Lesson: check if your $fp is valid before entering the loop, or look closer if you get a false. <?php function wait_for_file($fp) { if ($fp === false) { return; } while (true) { if (flock($fp, LOCK_EX)) { return; } $k = rand(0, 20); usleep(round($k * 10000)); # k * 10ms } } ?> --was-- I ran into a loop because I just checked for true (= you got the lock) as return value of flock() and tried again when I got a false. function naive_wait_for_file($fp) { while (true) { if (flock($fp, LOCK_EX)) { return; } $k = rand(0, 20); usleep(round($k * 10000)); # k * 10ms } } Unfortunately in one case the $fp I put in was invalid, so I always got false and got stuck. Lesson: check if your $fp is valid before entering the loop, or look closer if you get a false. function wait_for_file($fp) { if ($fp === false) { return; } while (true) { if (flock($fp, LOCK_EX)) { return; } $k = rand(0, 20); usleep(round($k * 10000)); # k * 10ms } } http://php.net/manual/en/function.flock.php

« previous php.notes (#155407) next »