Database locks are now having its very own functions

This commit is contained in:
Michael 2017-06-04 12:59:29 +00:00
parent 5de03c1b27
commit d2cb87a200
2 changed files with 24 additions and 2 deletions

View File

@ -806,6 +806,28 @@ class dba {
return self::e($sql, $param); return self::e($sql, $param);
} }
/**
* @brief Locks a table for exclusive write access
*
* This function can be extended in the future to accept a table array as well.
*
* @param string $table Table name
*
* @return boolean was the lock successful?
*/
static public function lock($table) {
return self::e("LOCK TABLES `".self::$dbo->escape($table)."` WRITE");
}
/**
* @brief Unlocks all locked tables
*
* @return boolean was the unlock successful?
*/
static public function unlock() {
return self::e("UNLOCK TABLES");
}
/** /**
* @brief Starts a transaction * @brief Starts a transaction
* *

View File

@ -34,7 +34,7 @@ class Lock {
$start = time(); $start = time();
do { do {
dba::p("LOCK TABLE `locks` WRITE"); dba::lock('locks');
$lock = dba::select('locks', array('locked', 'pid'), array('name' => $fn_name), array('limit' => 1)); $lock = dba::select('locks', array('locked', 'pid'), array('name' => $fn_name), array('limit' => 1));
if (dbm::is_result($lock)) { if (dbm::is_result($lock)) {
@ -57,7 +57,7 @@ class Lock {
$got_lock = true; $got_lock = true;
} }
dba::p("UNLOCK TABLES"); dba::unlock();
if (!$got_lock) { if (!$got_lock) {
sleep($wait_sec); sleep($wait_sec);