
    \d                         d Z ddlmZ  G d d          Zd Zde_        d Zd Zd	 Zd
 Z	ddZ
 e            Zd Zd Zd Zdadadada	 ddlZeZ e
d           n# e$ r dZY nw xY wg dZdS )zT
A module to provide some very basic threading primitives, such as
synchronization.
    wrapsc                       e Zd ZdZd ZdS )	DummyLockzF
    Hack to allow locks to be unpickled on an unthreaded system.
    c                     t           dfS N unpickle_lockselfs    9lib/python3.11/site-packages/twisted/python/threadable.py
__reduce__zDummyLock.__reduce__   s    r""    N)__name__
__module____qualname____doc__r   r	   r   r   r   r      s-         # # # # #r   r   c                  H    t           t                      S t                      S N)threadingmoduleXLockr   r	   r   r   r   r      s    "ww{{r   Tc                     d| j         vrQt                                           d| j         vrt                      | j         d<   t                                           | j                                         d S )N_threadable_lock)__dict___synchLockCreatoracquirer   releaser   r   s    r   	_synchPrer   !   sl    ..!!###T]2205DM,-!!###!!#####r   c                 8    | j                                          d S r   )r   r   r   s    r   
_synchPostr!   *   s    !!#####r   c                 <    t                    fd            }|S )Nc                     t          |            	  | g|R i |t          |            S # t          |            w xY wr   )r   r!   )r   argskwargsfunctions      r   syncz_sync.<locals>.sync/   sU    $	8D24222622tJts   - >r   )klassr&   r'   s    ` r   _syncr)   .   s3    
8__    _ Kr   c                      t           ;| D ]:}|j        D ].}t          ||j        |                   }t	          |||           /9dS dS )a&  
    Make all methods listed in each class' synchronized attribute synchronized.

    The synchronized attribute should be a list of strings, consisting of the
    names of methods that must be synchronized. If we are running in threaded
    mode these methods will be wrapped with a lock.
    N)r   synchronizedr)   r   setattr)klassesr(   
methodNamer'   s       r   synchronizer/   :   sm     " 	1 	1E#0 1 1
UEN:$>??z400001 #"	1 	1r      c                     | rIt           s@t          *da  G d dt          j                  at                      adS t          d          dS t           rt          d          dS )zbInitialize threading.

    Don't bother calling this.  If it needs to happen, it will happen.
    NTc                       e Zd Zd ZdS )r   c                     t           dfS r   r
   r   s    r   r   zXLock.__reduce__V   s     -r22r   N)r   r   r   r   r	   r   r   r   r   U   s#        3 3 3 3 3r   r   z:Cannot initialize threading, platform lacks thread supportzCannot uninitialize threads)threadedr   _RLockr   r   RuntimeError)with_threadss    r   initr8   I   s       	*3 3 3 3 3O2 3 3 3 %*GG!!!"P  	 	  	<===Dr   c                  Z    t           t          S t                                           j        S r   )r   _dummyIDcurrent_threadidentr	   r   r   getThreadIDr=   h   s"    ))++11r   c                  0    t           t                      k    S )zCAre we in the thread responsible for I/O requests (the event loop)?)ioThreadr=   r	   r   r   isInIOThreadr@   n   s    {}}$$r   c                  "    t                      adS )z8Mark the current thread as responsible for I/O requests.N)r=   r?   r	   r   r   registerAsIOThreadrB   s   s     }}HHHr   NF)r@   rB   r=   r   )r0   )r   	functoolsr   r   r   __safe_for_unpickling__r   r!   r)   r/   r8   objectr:   r=   r@   rB   r?   r4   r   r   	threading_threadingmoduler   ImportError__all__r	   r   r   <module>rJ      sd  
       # # # # # # # #   )- %$ $ $$ $ $	 	 	1 1 1   8 6882 2 2% % %
    (((( 'ODJJJJ	    OOO I
H
Hs   A A('A(