dsn); $database = $dsnArray['database']; $domainID = CRM_Core_Config::domainID(); if ($serverWideLock) { $this->_name = $name; } else { $this->_name = $database . '.' . $domainID . '.' . $name; } $this->_timeout = $timeout !== NULL ? $timeout : self::TIMEOUT; $this->acquire(); } function __destruct() { $this->release(); } function acquire() { if (!$this->_hasLock) { $query = "SELECT GET_LOCK( %1, %2 )"; $params = array(1 => array($this->_name, 'String'), 2 => array($this->_timeout, 'Integer'), ); $res = CRM_Core_DAO::singleValueQuery($query, $params); if ($res) { $this->_hasLock = TRUE; } } return $this->_hasLock; } function release() { if ($this->_hasLock) { $this->_hasLock = FALSE; $query = "SELECT RELEASE_LOCK( %1 )"; $params = array(1 => array($this->_name, 'String')); return CRM_Core_DAO::singleValueQuery($query, $params); } } function isFree() { $query = "SELECT IS_FREE_LOCK( %1 )"; $params = array(1 => array($this->_name, 'String')); return CRM_Core_DAO::singleValueQuery($query, $params); } function isAcquired() { return $this->_hasLock; } }