U
    Ã@ÛfÍ  ã                   @   s,   d dl mZ d dlmZ G dd„ deƒZdS )é    )Úhubs)Ú	Semaphorec                   @   s"   e Zd ZdZddd„Zdd„ ZdS )	ÚLockzÈA lock.
    This is API-compatible with :class:`threading.Lock`.

    It is a context manager, and thus can be used in a with block::

      lock = Lock()
      with lock:
        do_some_stuff()
    Tc                 C   s<   | j dkrtdƒ‚|  j d7  _ | jr8t ¡  d| j¡ dS )zÅModify behaviour vs :class:`Semaphore` to raise a RuntimeError
        exception if the value is greater than zero. This corrects behaviour
        to realign with :class:`threading.Lock`.
        r   zrelease unlocked locké   T)ÚcounterÚRuntimeErrorÚ_waitersr   Zget_hubZschedule_call_globalZ_do_acquire)ÚselfÚblocking© r   úG/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/lock.pyÚrelease   s    
zLock.releasec                 C   s   d| _ | j ¡  d S )Nr   )r   r   Úclear)r	   r   r   r   Ú_at_fork_reinit#   s    zLock._at_fork_reinitN)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   

r   N)Zeventletr   Zeventlet.semaphorer   r   r   r   r   r   Ú<module>   s   