HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers84/zuiderbos.nl/vendor/nqxcode/phpmorphy/src/phpMorphy/Semaphore/Win.php
<?php
/*
* This file is part of phpMorphy project
*
* Copyright (c) 2007-2012 Kamaev Vladimir <heromantor@users.sourceforge.net>
*
*     This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
*     This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
*     You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/

class phpMorphy_Semaphore_Win implements phpMorphy_Semaphore_SemaphoreInterface {
    const DIR_NAME = 'phpmorphy_semaphore';
    const USLEEP_TIME = 100000; // 0.1s
    const MAX_SLEEP_TIME = 5000000; // 5sec

    protected $dir_path;

    function __construct($key) {
        $this->dir_path = $this->getTempDir() . DIRECTORY_SEPARATOR . self::DIR_NAME . "_$key";

        register_shutdown_function(array($this, 'unlock'));
    }

    protected function getTempDir() {
        if(false === ($result = getenv('TEMP'))) {
            if(false === ($result = getenv('TMP'))) {
                throw new phpMorphy_Exception("Can`t get temporary directory");
            }
        }

        return $result;
    }

    function lock() {
        for($i = 0; $i < self::MAX_SLEEP_TIME; $i += self::USLEEP_TIME) {
            if(!file_exists($this->dir_path)) {
                if(false !== @mkdir($this->dir_path, 0644)) {
                    return true;
                }
            }

            usleep(self::USLEEP_TIME);
        }

        throw new phpMorphy_Exception("Can`t acquire semaphore");
    }

    function unlock() {
        @rmdir($this->dir_path);
    }

    function remove() {
    }
}