[BUGFIX] Locker throws exception if semaphore can not be acquired 93/27293/2
authorMarkus Klein <klein.t3@mfc-linz.at>
Mon, 16 Sep 2013 15:59:10 +0000 (17:59 +0200)
committerMarkus Klein <klein.t3@mfc-linz.at>
Mon, 3 Feb 2014 10:07:14 +0000 (11:07 +0100)
Locker has wrong LockState in semaphore mode, if the lock
could not be acquired.

Resolves: #52048
Releases: 6.2, 6.1, 6.0
Change-Id: Ifdc2f5d9b2a3c35a0ebef54817a56344f27ab15d
Reviewed-on: https://review.typo3.org/27293
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/core/Classes/Locking/Locker.php

index f6a3dc2..2fa391e 100644 (file)
@@ -143,6 +143,7 @@ class Locker {
         * It is important to know that the lock will be acquired in any case, even if the request was blocked first. Therefore, the lock needs to be released in every situation.
         *
         * @return boolean Returns TRUE if lock could be acquired without waiting, FALSE otherwise.
+        * @throws \RuntimeException
         */
        public function acquire() {
                // Default is TRUE, which means continue without caring for other clients. In the case of TYPO3s cache management, this has no negative effect except some resource overhead.
@@ -192,8 +193,12 @@ class Locker {
                        break;
                case 'semaphore':
                        if (sem_acquire($this->resource)) {
-                               // Unfortunately it seems not possible to find out if the request was blocked, so we return FALSE in any case to make sure the operation is tried again.
+                               // Unfortunately it is not possible to find out if the request has blocked,
+                               // as sem_acquire will block until we get the resource.
+                               // So we return FALSE in any case.
                                $noWait = FALSE;
+                       } else {
+                               throw new \RuntimeException('Could not get lock on semaphore "' . $this->resource . '"', 1379502242);
                        }
                        break;
                case 'disable':
@@ -321,4 +326,4 @@ class Locker {
 }
 
 
-?>
\ No newline at end of file
+?>