
    wBf6                         d Z ddlZddlZddlmZ ddlmZ dZdZdZ	ed	        Z
	 ddlZed
        Zd Zy# e$ r5 	 ddlZ G d d      Zn# e$ r  ej                  d       e
ZY nw xY wY d Zyw xY w)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   
      c              #      K   d yw)zWhen locking is not available.N fds    8lib/python3.12/site-packages/conda/gateways/disk/lock.py
_lock_noopr      s      
s   c              #     K   | j                         }| j                  t               t        j                  | j                         t        j                  d       	 | j                  |       d  | j                  t               t        j                  | j                         t        j                  d       y # | j                  t               t        j                  | j                         t        j                  d       w xY wwNr   )tellseek	LOCK_BYTEmsvcrtlockingfilenoLK_LOCKLK_UNLCK)r   r   s     r   
_lock_implr      s     wwy
	ryy{FNNA6	<GGDMGGINN299;; GGINN299;;s    ADB: 1A	D:A
DDc                       e Zd Zd Zd Zd Zy)r   c                     || _         y Nr   )selfr   s     r   __init__z_lock_impl.__init__5   s	        c                 $   t        t              D ]I  }	 t        j                  | j                  t        j
                  t        j                  z  dt                y  y # t        $ r) |t        dz
  kD  r t        j                  t               Y ~w xY w)Nr      )rangeLOCK_ATTEMPTSfcntllockfr   LOCK_EXLOCK_NBr   OSErrortimesleep
LOCK_SLEEP)r   attempts     r   	__enter__z_lock_impl.__enter__8   ss    $]3 
/G	/ GGU]]U]]%BAy 
/ # /"]Q%66!

:./s   AA/BBc                 l    t        j                  | j                  t         j                  dt               y r   )r$   r%   r   LOCK_UNr   )r   excs     r   __exit__z_lock_impl.__exit__E   s    DGGU]]AyAr   N)__name__
__module____qualname__r   r-   r1   r
   r   r   r   r   4   s    /Br   r   zfile locking not availablec                 N    t         j                  st        |       S t        |       S r   )r   no_lockr   r   r   s    r   lockr7   I   s    ??"~b>r   )__doc__r)   warnings
contextlibr   base.contextr   r   r#   r+   r   r   r   ImportErrorr$   warnr7   r
   r   r   <module>r>      s      % #	
 
 

,B	< 	<VA  BB	B 	B   23
	 :ABs2   6 A0A A0A'$A0&A''A0/A0