classes/SharedLock.php
static function release( $token, $mode, $opts=array() )
    {
        // just in case (is_file results might be cached!)...
        clearstatcache();

        $lockDir = self::lockDir( $opts );
        if ( $mode == LOCK_EX )
        {
            $wLockFile = "$lockDir/{$token}_W.lock";
            if ( is_file(  $wLockFile ) && !unlink( $wLockFile ) )
            {
                // what to do here? we echo an error msg but do not throw an exception
                pake_echo_error( "Could not remove W lock file '$wLockFile'" );
            }
            return;
        }
        // assume a read lock
        $rLockFile = "$lockDir/{$token}_R/" . getmypid() . ".lock";
        if ( is_file(  $rLockFile ) && !unlink( $rLockFile ) )
        {
            // what to do here? we echo an error msg but do not throw an exception
            pake_echo_error( "Could not remove R lock file '$rLockFile'" );
        }
    }
static function release( $token, $mode, $opts=array() )
    {
        // just in case (is_file results might be cached!)...
        clearstatcache();

        $lockDir = self::lockDir( $opts );
        if ( $mode == LOCK_EX )
        {
            $wLockFile = "$lockDir/{$token}_W.lock";
            if ( is_file(  $wLockFile ) && !unlink( $wLockFile ) )
            {
                // what to do here? we echo an error msg but do not throw an exception
                pake_echo_error( "Could not remove W lock file '$wLockFile'" );
            }
            return;
        }
        // assume a read lock
        $rLockFile = "$lockDir/{$token}_R/" . getmypid() . ".lock";
        if ( is_file(  $rLockFile ) && !unlink( $rLockFile ) )
        {
            // what to do here? we echo an error msg but do not throw an exception
            pake_echo_error( "Could not remove R lock file '$rLockFile'" );
        }
    }
Releases the token. Does not warn if lock has disappeared before the release.
@param string $token
@param int $mode
@param array $opts