]> git.mxchange.org Git - friendica.git/blobdiff - include/lock.php
Issue 2122: Make sure to always return the correct number of entries
[friendica.git] / include / lock.php
index 707e33609e32456b64c7e295b8786b3f1e0964f3..70cf4b787b439dbf25c5c135965cd0b3b4bfad24 100644 (file)
@@ -11,20 +11,22 @@ function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
        $start = time();
 
        do {
-               q("LOCK TABLE locks WRITE");
-               $r = q("SELECT locked FROM locks WHERE name = '%s' LIMIT 1",
+               q("LOCK TABLE `locks` WRITE");
+               $r = q("SELECT `locked`, `created` FROM `locks` WHERE `name` = '%s' LIMIT 1",
                        dbesc($fn_name)
                );
 
-               if((count($r)) && (! $r[0]['locked'])) {
-                       q("UPDATE locks SET locked = 1 WHERE name = '%s' LIMIT 1",
+               if((count($r)) AND (!$r[0]['locked'] OR (strtotime($r[0]['created']) < time() - 3600))) {
+                       q("UPDATE `locks` SET `locked` = 1, `created` = '%s' WHERE `name` = '%s'",
+                               dbesc(datetime_convert()),
                                dbesc($fn_name)
                        );
                        $got_lock = true;
                }
                elseif(! $r) { // the Boolean value for count($r) should be equivalent to the Boolean value of $r
-                       q("INSERT INTO locks ( name, locked ) VALUES ( '%s', 1 )",
-                               dbesc($fn_name)
+                       q("INSERT INTO `locks` (`name`, `created`, `locked`) VALUES ('%s', '%s', 1)",
+                               dbesc($fn_name),
+                               dbesc(datetime_convert())
                        );
                        $got_lock = true;
                }
@@ -37,7 +39,7 @@ function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
        } while(($block) && (! $got_lock) && ((time() - $start) < $timeout));
 
        logger('lock_function: function ' . $fn_name . ' with blocking = ' . $block . ' got_lock = ' . $got_lock . ' time = ' . (time() - $start), LOGGER_DEBUG);
-       
+
        return $got_lock;
 }}
 
@@ -65,7 +67,7 @@ function block_on_function_lock($fn_name, $wait_sec = 2, $timeout = 30) {
 
 if(! function_exists('unlock_function')) {
 function unlock_function($fn_name) {
-       $r = q("UPDATE locks SET locked = 0 WHERE name = '%s' LIMIT 1",
+       $r = q("UPDATE `locks` SET `locked` = 0, `created` = '0000-00-00 00:00:00' WHERE `name` = '%s'",
                        dbesc($fn_name)
             );