Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
vibes
/
includes
/
libraries
/
lock
/
mutex
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php declare(strict_types=1); namespace malkusch\lock\mutex; use RuntimeException; class PgAdvisoryLockMutex extends LockMutex { /** * @var \PDO */ private $pdo; /** * @var int */ private $key1; /** * @var int */ private $key2; /** * @throws \RuntimeException */ public function __construct(\PDO $PDO, string $name) { $this->pdo = $PDO; $hashed_name = hash('sha256', $name, true); if (false === $hashed_name) { // @phpstan-ignore-line throw new RuntimeException('Unable to hash the key, sha256 algorithm is not supported.'); } [$bytes1, $bytes2] = str_split($hashed_name, 4); $this->key1 = unpack('i', $bytes1)[1]; $this->key2 = unpack('i', $bytes2)[1]; } public function lock(): void { $statement = $this->pdo->prepare('SELECT pg_advisory_lock(?,?)'); $statement->execute([ $this->key1, $this->key2, ]); } public function unlock(): void { $statement = $this->pdo->prepare('SELECT pg_advisory_unlock(?,?)'); $statement->execute([ $this->key1, $this->key2 ]); } }