You are here

function _apdqc_lock_release in Asynchronous Prefetch Database Query Cache 7

Same name in this branch
  1. 7 apdqc.lock.apc.inc \_apdqc_lock_release()
  2. 7 apdqc.lock.db.inc \_apdqc_lock_release()
  3. 7 apdqc.lock.memcache_storage.inc \_apdqc_lock_release()
  4. 7 apdqc.lock.memcache.inc \_apdqc_lock_release()
  5. 7 apdqc.lock.redis.inc \_apdqc_lock_release()

Release a lock previously acquired by lock_acquire().

This will release the named lock if it is still held by the current request.

Parameters

string $name: The name of the lock.

Related topics

1 call to _apdqc_lock_release()
apdqc.lock.inc in ./apdqc.lock.inc
A database-mediated implementation of a locking mechanism.
1 string reference to '_apdqc_lock_release'
apdqc.lock.inc in ./apdqc.lock.inc
A database-mediated implementation of a locking mechanism.

File

./apdqc.lock.db.inc, line 332
A database-mediated implementation of a locking mechanism.

Code

function _apdqc_lock_release($name) {
  global $locks;
  unset($locks[$name]);

  // Build query.
  $query = \Database::getConnection()
    ->prefixTables("\n    DELETE FROM {" . db_escape_table('semaphore') . "}\n    WHERE name = '" . apdqc_escape_string($name) . "'\n    AND value = '" . apdqc_escape_string(_lock_id()) . "'\n  ");

  // Run Query.
  $results = apdqc_query(array(
    'semaphore',
  ), array(
    $name,
  ), $query, array(
    'get_affected_rows' => TRUE,
    'async' => TRUE,
  ));
  if (is_string($results) && $results === 'NO DB') {
    db_delete('semaphore')
      ->condition('name', $name)
      ->condition('value', _lock_id())
      ->execute();
  }
}