
    AHjy                        d dl mZ d dlmZmZmZ  G d d      Zedk(  r%d dlmZ d Zd dlZ ej                   e              yy)	    )annotations)LockTaskcurrent_taskc                  H    e Zd ZdZd	dZd	dZd	dZed        Zd	dZ	d	dZ
y)
RLockzA re-entrant asyncio lock.c                >    d | _         d| _        t               | _        y )Nr   )_owner_countr   _lockselfs    E/root/tools/cai/cai_env/lib/python3.12/site-packages/textual/rlock.py__init__zRLock.__init__	   s    #'V
    c                   K   t               }|J | j                  | j                  |ur)| j                  j                          d{    || _        | xj                  dz  c_        y7 !w)z$Wait until the lock can be acquired.N   )r   r
   r   acquirer   r   tasks     r   r   zRLock.acquire   s^     ~;;$++T"9**$$&&&DKq 's   AA,A*	"A,c                    t               }|J | xj                  dz  c_        | j                  dk  rt        d      | j                  |u r/| j                  s"d| _        | j                  j                          yyy)z#Release a previously acquired lock.Nr   r   z#RLock.release called too many times)r   r   RuntimeErrorr
   r   releaser   s     r   r   zRLock.release   sn    ~q;;?DEE;;$;;"

""$  r   c                6    | j                   j                         S )z Return True if lock is acquired.)r   lockedr   s    r   	is_lockedzRLock.is_locked$   s     zz  ""r   c                @   K   | j                          d{    y7 w)z9Asynchronous context manager to acquire and release lock.N)r   r   s    r   
__aenter__zRLock.__aenter__)   s     llns   c                ,   K   | j                          yw)zExit the context manager.N)r   )r   _type_value
_tracebacks       r   	__aexit__zRLock.__aexit__-   s     s   N)returnNone)__name__
__module____qualname____doc__r   r   r   propertyr   r   r#    r   r   r   r      s2    $
% # #r   r   __main__)r   c                   K   t               } | 4 d {    | 4 d {    t        d       d d d       d {    d d d       d {    y 7 ;7 27 # 1 d {  7  sw Y   )xY w7  # 1 d {  7  sw Y   y xY ww)NHello)r   print)locks    r   locksr1   5   sy     w 	 	  g 	 	 	    	 	 	 	s   BABA,AA,AA,AA,B	A*
BA,A,A'	AA'	#A,*B,A>2A53A>:BN)

__future__r   asyncior   r   r   r   r&   r1   runr+   r   r   <module>r5      sE    " , ,) )X z GKK r   