
    si(                         S r SSKrSSKrSSKJr  SSKJr  SSKJr  Sr	Sr
S	r\S
 5       r SSKr\S 5       r\
S.S jrS rg! \ a3     SSKr " S S5      r N"! \ a    \R"                  " S5        \r  N?f = ff = f)z
Record locking to manage potential repodata / repodata metadata file contention
between conda processes. Try to acquire a lock on a single byte in the metadat
file; modify both files; then release the lock.
    N)contextmanager   )context)	LockError   
      c              #      #    Sv   g7f)zWhen locking is not available.N fdlock_attemptss     8lib/python3.13/site-packages/conda/gateways/disk/lock.py
_lock_noopr      s
      
s   c              #     #    U R                  5       nU R                  [        5         [        R                  " U R                  5       [        R                  S5         U R                  U5        S v   U R                  [        5         [        R                  " U R                  5       [        R                  S5        g ! [         a    [        S5      ef = f! U R                  [        5         [        R                  " U R                  5       [        R                  S5        f ! [         a    [        S5      ef = f= f! [         a    [        S5      ef = f7f)Nr	   Failed to release lock.Failed to acquire lock.)
tellseek	LOCK_BYTEmsvcrtlockingfilenoLK_LOCKLK_UNLCKOSErrorr   )r   r   r   s      r   
_lock_implr      s     wwy
		?NN299;:?	"?NN299;C ?#$=>>? 	"?NN299;C ?#$=>>?  	7566	7s^   &E4D? C 3E	4B> =E>CED<.4D#"D<#D99D<<E?EEc                   &    \ rS rSrS rS rS rSrg)r   =   c                     Xl         X l        g Nr   )selfr   r   s      r   __init___lock_impl.__init__>   s    %2"    c                 Z   [        U R                  5       HJ  n [        R                  " U R                  [        R
                  [        R                  -  S[        5          g    g ! [         a;    XR                  S-
  :  a  [        S5      e[        R                  " [        5         M  f = f)Nr	      r   )ranger   fcntllockfr   LOCK_EXLOCK_NBr   r   r   timesleep
LOCK_SLEEP)r"   attempts     r   	__enter___lock_impl.__enter__B   s    $T%7%78G	/ GGU]]U]]%BAy   9 # /"%7%7!%;;"+,E"FF

:./s   AA%%AB*)B*c                      [         R                  " U R                  [         R                  S[        5        g ! [
         a    [        S5      ef = f)Nr	   r   )r)   r*   r   LOCK_UNr   r   r   )r"   excs     r   __exit___lock_impl.__exit__O   s<    ?KK9E ?#$=>>?s	   58 Ar   N)__name__
__module____qualname____firstlineno__r#   r1   r6   __static_attributes__r   r%   r   r   r   =   s    3/?r%   r   zfile locking not available)r   c                X    [         R                  (       d  [        X5      $ [        X5      $ r!   )r   no_lockr   r   r   s     r   lockr?   V   s    ??",,b((r%   c                      [         [        L$ )z@Return a bool to report whether file locking is supported or not)r   r   r   r%   r   locking_supportedrA   ]   s    Z''r%   )__doc__r-   warnings
contextlibr   base.contextr   
exceptionsr   r   LOCK_ATTEMPTSr/   r   r   r   ImportErrorr)   warnr?   rA   r   r%   r   <module>rJ      s      % # #	
 
 

8?? ?n , )(W  !? ?	? 	?   23
	 !?s/   A A<
A
A<A84A<7A88A<