]> git.mxchange.org Git - friendica.git/blobdiff - include/lock.php
Diabook - move pause icon.
[friendica.git] / include / lock.php
index 9bdb71125af64b236ad32c6d7d50d4e0ade517f9..707e33609e32456b64c7e295b8786b3f1e0964f3 100644 (file)
@@ -3,11 +3,12 @@
 // Provide some ability to lock a PHP function so that multiple processes
 // can't run the function concurrently
 if(! function_exists('lock_function')) {
-function lock_function($fn_name, $block = true, $wait_sec = 2) {
+function lock_function($fn_name, $block = true, $wait_sec = 2, $timeout = 30) {
        if( $wait_sec == 0 )
                $wait_sec = 2;  // don't let the user pick a value that's likely to crash the system
 
        $got_lock = false;
+       $start = time();
 
        do {
                q("LOCK TABLE locks WRITE");
@@ -33,19 +34,21 @@ function lock_function($fn_name, $block = true, $wait_sec = 2) {
                if(($block) && (! $got_lock))
                        sleep($wait_sec);
 
-       } while(($block) && (! $got_lock));
+       } while(($block) && (! $got_lock) && ((time() - $start) < $timeout));
 
-       logger('lock_function: function ' . $fn_name . ' with blocking = ' . $block . ' got_lock = ' . $got_lock, LOGGER_DEBUG);
+       logger('lock_function: function ' . $fn_name . ' with blocking = ' . $block . ' got_lock = ' . $got_lock . ' time = ' . (time() - $start), LOGGER_DEBUG);
        
        return $got_lock;
 }}
 
 
 if(! function_exists('block_on_function_lock')) {
-function block_on_function_lock($fn_name, $wait_sec = 2) {
+function block_on_function_lock($fn_name, $wait_sec = 2, $timeout = 30) {
        if( $wait_sec == 0 )
                $wait_sec = 2;  // don't let the user pick a value that's likely to crash the system
 
+       $start = time();
+
        do {
                $r = q("SELECT locked FROM locks WHERE name = '%s' LIMIT 1",
                                dbesc($fn_name)
@@ -54,7 +57,7 @@ function block_on_function_lock($fn_name, $wait_sec = 2) {
                if(count($r) && $r[0]['locked'])
                        sleep($wait_sec);
 
-       } while(count($r) && $r[0]['locked']);
+       } while(count($r) && $r[0]['locked'] && ((time() - $start) < $timeout));
 
        return;
 }}
@@ -62,15 +65,11 @@ function block_on_function_lock($fn_name, $wait_sec = 2) {
 
 if(! function_exists('unlock_function')) {
 function unlock_function($fn_name) {
-       //$r = q("LOCK TABLE lock WRITE");
        $r = q("UPDATE locks SET locked = 0 WHERE name = '%s' LIMIT 1",
                        dbesc($fn_name)
             );
-       //$r = q("UNLOCK TABLES");
 
        logger('unlock_function: released lock for function ' . $fn_name, LOGGER_DEBUG);
 
        return;
 }}
-
-?>