]> git.mxchange.org Git - friendica.git/commitdiff
Fixing force-flag for lock-releasing
authorPhilipp Holzer <admin@philipp.info>
Sun, 24 Feb 2019 09:08:28 +0000 (10:08 +0100)
committerPhilipp Holzer <admin@philipp.info>
Sun, 24 Feb 2019 09:08:28 +0000 (10:08 +0100)
src/Core/Lock.php
src/Core/Lock/CacheLockDriver.php
src/Core/Lock/DatabaseLockDriver.php
src/Core/Lock/ILockDriver.php
src/Core/Lock/SemaphoreLockDriver.php
src/Core/Update.php

index e8c8a7041605b0826be5912722f7e9b75629de5d..adff049dce304c4908fe3b323280d1d1d2074d90 100644 (file)
@@ -122,12 +122,13 @@ class Lock
        /**
         * @brief Releases a lock if it was set by us
         *
-        * @param string $key Name of the lock
+        * @param string $key   Name of the lock
+        * @param bool   $force Force the lock to get releases
         * @return void
         */
-       public static function release($key)
+       public static function release($key, $force = false)
        {
-               self::getDriver()->releaseLock($key);
+               self::getDriver()->releaseLock($key, $force);
        }
 
        /**
index 18d441ffea09d5a0910ec6ac3ada461db885ab7c..d1ef1acffa00c55bb9bf6b1aa6b9bb2e540301dc 100644 (file)
@@ -61,11 +61,15 @@ class CacheLockDriver extends AbstractLockDriver
        /**
         * (@inheritdoc)
         */
-       public function releaseLock($key)
+       public function releaseLock($key, $force = false)
        {
                $cachekey = self::getLockKey($key);
 
-               $this->cache->compareDelete($cachekey, getmypid());
+               if ($force) {
+                       $this->cache->delete($key);
+               } else {
+                       $this->cache->compareDelete($cachekey, getmypid());
+               }
                $this->markRelease($key);
        }
 
index 6f18fb5bec7dcf63416c4112cec7c2bf307b89f1..73b97dc4b76b43cc8ccdd29d687478f7f85ba74c 100644 (file)
@@ -68,9 +68,15 @@ class DatabaseLockDriver extends AbstractLockDriver
        /**
         * (@inheritdoc)
         */
-       public function releaseLock($key)
+       public function releaseLock($key, $force = false)
        {
-               DBA::delete('locks', ['name' => $key, 'pid' => $this->pid]);
+               if ($force) {
+                       $where = ['name' => $key];
+               } else {
+                       $where = ['name' => $key, 'pid' => $this->pid];
+               }
+
+               DBA::delete('locks', $where);
 
                $this->markRelease($key);
 
index a255f683454753e414e2c20677f106661dccf486..2ee145980c5bae0bf5572f548d958f8fe3cca621 100644 (file)
@@ -33,11 +33,12 @@ interface ILockDriver
        /**
         * Releases a lock if it was set by us
         *
-        * @param string $key The Name of the lock
+        * @param string $key   The Name of the lock
+        * @param bool   $force Force the lock to get released
         *
         * @return void
         */
-       public function releaseLock($key);
+       public function releaseLock($key, $force = false);
 
        /**
         * Releases all lock that were set by us
index cf1ce5a8d8bc770cdc06120868f351e4aef65402..5ce03b2c39a02a77ef6ed391afe9abe04542dac6 100644 (file)
@@ -50,7 +50,7 @@ class SemaphoreLockDriver extends AbstractLockDriver
        /**
         * (@inheritdoc)
         */
-       public function releaseLock($key)
+       public function releaseLock($key, $force = false)
        {
                if (empty(self::$semaphore[$key])) {
                        return false;
index ed6c058726431e2383cb27a9203674bcad309dc8..7f825f384c0fdf39c5878b09d073cee5d5fcbf8a 100644 (file)
@@ -60,7 +60,7 @@ class Update
                // In force mode, we release the dbupdate lock first
                // Necessary in case of an stuck update
                if ($force) {
-                       Lock::release('dbupdate');
+                       Lock::release('dbupdate', true);
                }
 
                $build = Config::get('system', 'build');