Server IP : 185.86.78.101 / Your IP : 216.73.216.124 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/wwwroot/mifepriston.org/vendor/yiisoft/yii2/mutex/ |
Upload File : |
<?php /** * @link https://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license https://www.yiiframework.com/license/ */ namespace yii\mutex; use yii\base\InvalidConfigException; /** * PgsqlMutex implements mutex "lock" mechanism via PgSQL locks. * * Application configuration example: * * ``` * [ * 'components' => [ * 'db' => [ * 'class' => 'yii\db\Connection', * 'dsn' => 'pgsql:host=127.0.0.1;dbname=demo', * ] * 'mutex' => [ * 'class' => 'yii\mutex\PgsqlMutex', * ], * ], * ] * ``` * * @see Mutex * * @author nineinchnick <janek.jan@gmail.com> * @since 2.0.8 */ class PgsqlMutex extends DbMutex { use RetryAcquireTrait; /** * Initializes PgSQL specific mutex component implementation. * @throws InvalidConfigException if [[db]] is not PgSQL connection. */ public function init() { parent::init(); if ($this->db->driverName !== 'pgsql') { throw new InvalidConfigException('In order to use PgsqlMutex connection must be configured to use PgSQL database.'); } } /** * Converts a string into two 16 bit integer keys using the SHA1 hash function. * @param string $name * @return array contains two 16 bit integer keys */ private function getKeysFromName($name) { return array_values(unpack('n2', sha1($name, true))); } /** * Acquires lock by given name. * @param string $name of the lock to be acquired. * @param int $timeout time (in seconds) to wait for lock to become released. * @return bool acquiring result. * @see https://www.postgresql.org/docs/9.0/functions-admin.html */ protected function acquireLock($name, $timeout = 0) { list($key1, $key2) = $this->getKeysFromName($name); return $this->retryAcquire($timeout, function () use ($key1, $key2) { return $this->db->useMaster(function ($db) use ($key1, $key2) { /** @var \yii\db\Connection $db */ return (bool) $db->createCommand( 'SELECT pg_try_advisory_lock(:key1, :key2)', [':key1' => $key1, ':key2' => $key2] )->queryScalar(); }); }); } /** * Releases lock by given name. * @param string $name of the lock to be released. * @return bool release result. * @see https://www.postgresql.org/docs/9.0/functions-admin.html */ protected function releaseLock($name) { list($key1, $key2) = $this->getKeysFromName($name); return $this->db->useMaster(function ($db) use ($key1, $key2) { /** @var \yii\db\Connection $db */ return (bool) $db->createCommand( 'SELECT pg_advisory_unlock(:key1, :key2)', [':key1' => $key1, ':key2' => $key2] )->queryScalar(); }); } }