- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/update_b24.php
- Класс: CB24Updater
- Вызов: CB24Updater::Lock
public function Lock()
{
global $DB;
$uniq = $this->serverUniqID;
if ($DB->type == "MYSQL")
{
$dbLock = $DB->Query("SELECT GET_LOCK('".$uniq."_DBUpdater', 0) as L", false, "File: ".__FILE__."
Line: ".__LINE__);
$arLock = $dbLock->Fetch();
if ($arLock["L"] == "1")
return true;
else
return false;
}
elseif ($DB->type == "ORACLE")
{
$dbLock = $DB->Query("
declare
my_lock_id number;
my_result number;
lock_failed exception;
pragma exception_init(lock_failed, -54);
begin
my_lock_id:=dbms_utility.get_hash_value(to_char('".$uniq."_DBUpdater'), 0, 1024);
my_result:=dbms_lock.request(my_lock_id, dbms_lock.x_mode, 0, true);
-- Return value:
-- 0 - success
-- 1 - timeout
-- 2 - deadlock
-- 3 - parameter error
-- 4 - already own lock specified by 'id' or 'lockhandle'
-- 5 - illegal lockhandle
if(my_result<>0 and my_result<>4)then
raise lock_failed;
end if;
end;
", true);
return ($dbLock !== false);
}
else
{
$i = 60;
$DB->Query("DELETE FROM b_option WHERE MODULE_ID = 'main' AND NAME = '".$uniq."_DBUpdater' AND SITE_ID IS NULL AND DATEDIFF(SECOND, CONVERT(DATETIME, DESCRIPTION), GETDATE()) > ".$i, false, "File: ".__FILE__."
Line: ".__LINE__);
$DB->Query("SET LOCK_TIMEOUT 1", false, "File: ".__FILE__."
Line: ".__LINE__);
$dbLock = $DB->Query("INSERT INTO b_option(MODULE_ID, NAME, SITE_ID, VALUE, DESCRIPTION) VALUES ('main', '".$uniq."_DBUpdater', NULL, NULL, CONVERT(VARCHAR(128), GETDATE()))", true);
$DB->Query("SET LOCK_TIMEOUT -1", false, "File: ".__FILE__."
Line: ".__LINE__);
return ($dbLock !== false);
}
}