Index: t3lib/class.t3lib_db.php
===================================================================
--- t3lib/class.t3lib_db.php	(Revision 3517)
+++ t3lib/class.t3lib_db.php	(Arbeitskopie)
@@ -720,8 +720,67 @@
 		return $wgolParts;
 	}
 
+	/**
+	 * Tries to obtain a lock with a name given by the string $name with an optional timeout in seconds.
+	 *
+	 * Return values:
+	 * - 1: the lock was obtained successfully
+	 * - 0: the attempt timed out (because lock existed before and was not released withing the timeout)
+	 * - null: an error occurred
+	 *
+	 * @param	string		$name: Name identifying the lock
+	 * @param	integer		$timeout: Timeout for the attempt to obtain a lock
+	 * @return	mixed		Returns 1 if the lock was obtained or 0/null if not (see method comment for more details)
+	 */
+	public function getLock($name, $timeout=0) {
+		$timeout = intval($timeout);
+		$resource = $this->sql_query('SELECT GET_LOCK('.$this->fullQuoteStr($name, '_DEFAULT').($timeout>0 ? ', '.$timeout : '').')');
+		if (is_resource($resource)) {
+			list($result) = $this->sql_fetch_row($resource);
+			$this->sql_free_result($resource);
+		}
+		return $result;
+	}
 
+	/**
+	 * Releases the lock named by the string $name that was obtained with getLock().
+	 *
+	 * Return values:
+	 * - 1: the lock was released
+	 * - 0: the lock was not established by this thread and thus cannot be released
+	 * - null: the named lock did not exist
+	 *
+	 * @param	string		$name: Name identifying the lock
+	 * @return	mixed		Returns 1 if the lock was released or 0/null if not (see method comment for more details)
+	 */
+	public function releaseLock($name) {
+		$resource = $this->sql_query('SELECT RELEASE_LOCK('.$this->fullQuoteStr($name, '_DEFAULT').')');
+		if (is_resource($resource)) {
+			list($result) = $this->sql_fetch_row($resource);
+			$this->sql_free_result($resource);
+		}
+		return $result;
+	}
 
+	/**
+	 * Checkes whether the lock named by the string $name is free to use and thus not locked.
+	 *
+	 * Return values:
+	 * - 1: the lock is free
+	 * - 0: the lock is in use
+	 * - null: an error occurred
+	 *
+	 * @param	string		$name: Name identifying the lock
+	 * @return	mixed		Returns 1 if the lock is free or 0/null if not (see method comment for more details)
+	 */
+	public function isFreeLock($name) {
+		$resource = $this->sql_query('SELECT IS_FREE_LOCK('.$this->fullQuoteStr($name, '_DEFAULT').')');
+		if (is_resource($resource)) {
+			list($result) = $this->sql_fetch_row($resource);
+			$this->sql_free_result($resource);
+		}
+		return $result;
+	}
 
 
 
@@ -734,6 +793,9 @@
 
 
 
+
+
+
 	/**************************************
 	 *
 	 * MySQL wrapper functions
Index: t3lib/class.t3lib_lock.php
===================================================================
--- t3lib/class.t3lib_lock.php	(Revision 3517)
+++ t3lib/class.t3lib_lock.php	(Arbeitskopie)
@@ -119,6 +119,10 @@
 					$success = true;
 				}
 			break;
+			case 'database':
+				$this->resource = $this->id = md5($id);
+				$success = true;
+			break;
 			case 'disable':
 				return false;
 			break;
@@ -190,6 +194,18 @@
 					$noWait = false;
 				}
 			break;
+			case 'database':
+				$result = $GLOBALS['TYPO3_DB']->getLock($this->resource, $this->loops*$this->step);
+				if (!$result) {
+					if (isset($result)) {
+						$this->sysLog('Trying to acquire the lock timed out');
+					} else {
+						$this->sysLog('An error occurred while trying to acquire the lock', 3);
+					}
+					$noWait = false;
+					$isAcquired = false;
+				}
+			break;
 			case 'disable':
 				$noWait = false;
 				$isAcquired = false;
@@ -231,6 +247,17 @@
 					$success = false;
 				}
 			break;
+			case 'database':
+				$result = $GLOBALS['TYPO3_DB']->releaseLock($this->resource);
+				if (!$result) {
+					if (isset($result)) {
+						$this->sysLog('Could not release a lock which is owned by another process');
+						$success = false;
+					} else {
+						$this->sysLog('The lock to be released did not exist (anymore)');
+					}
+				}
+			break;
 			case 'disable':
 				$success = false;
 			break;
Index: typo3/sysext/cms/tslib/class.tslib_fe.php
===================================================================
--- typo3/sysext/cms/tslib/class.tslib_fe.php	(Revision 3517)
+++ typo3/sysext/cms/tslib/class.tslib_fe.php	(Arbeitskopie)
@@ -2817,7 +2817,7 @@
 	 */
 	function releasePageGenerationLock(&$lockObj) {
 		$success = false;
-			// If lock object is set and was aquired (may also happen if no_cache was enabled during runtime), release it:
+			// If lock object is set and was acquired (may also happen if no_cache was enabled during runtime), release it:
 		if (is_object($lockObj) && $lockObj instanceof t3lib_lock && $lockObj->getLockStatus()) {
 			$success = $lockObj->release();
 			$lockObj->sysLog('Released lock');
