
    daf                        d dl mZ  ej                  d      Zd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dl	mZ  ej                  d        G d	 d
      Zej!                         D  ci c]  \  } }| |j"                  j$                   c}} Z ej(                  eej*                  e      \  ZZ G d d      Zej!                         D  ci c]  \  } }| |j"                  j2                   c}} Z ej(                  eee      \  ZZ G d d      Z ej(                  ee      \  ZZd Z e!dk(  r ejD                          yyc c}} w c c}} w )    )util	importlibN)support)threading_helper)
lock_testsT)modulec                   H    e Zd Z ed       ZdZdZdZdZdZ	dZ
dZdZdZd Zy)ModuleLockAsRLockTestsc                 $    | j                  d      S )N	some_lockLockType)clss    9/root/Python-3.12.4/Lib/test/test_importlib/test_locks.py<lambda>zModuleLockAsRLockTests.<lambda>   s    s||K'@     Nc                 ~    t         j                         D ]&  }|j                  j                  j	                          ( y N)initvalues
_bootstrap_blocking_onclear)self	splitinits     r   tearDownzModuleLockAsRLockTests.tearDown&   s/     	6I  --335	6r   )__name__
__module____qualname__classmethodlocktypetest__is_ownedtest_try_acquiretest_try_acquire_contended	test_withtest_timeouttest_release_save_unacquiredtest_recursion_count	test_reprtest_locked_reprr    r   r   r
   r
      sF    @AH N!%IL#' I6r   r
   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)DeadlockAvoidanceTestsc                     	 t        j                         | _        t        j                  d       y # t
        $ r
 d | _        Y y w xY w)Ngư>)sysgetswitchintervalold_switchintervalr   setswitchintervalAttributeErrorr   s    r   setUpzDeadlockAvoidanceTests.setUp6   s=    	+&)&;&;&=D#%%h/ 	+&*D#	+s   .1 AAc                 \    | j                    t        j                  | j                          y y r   )r1   r/   r2   r4   s    r   r   zDeadlockAvoidanceTests.tearDown=   s'    "".!!$"9"9: /r   c                    	
 d}t        |      D cg c]  } j                  t        |             }}t        |      D cg c]  }||   ||dz   |z     f c}	|r|}n|dz
  }t        j                  |      g 
 fd	
fd}t        j                  ||      5  	 d d d         j                  t        
      |       
S c c}w c c}w # 1 sw Y   0xY w)N
      c                 R    	 | j                          y# j                  $ r Y yw xY w)zOTry to acquire the lock. Return True on success,
            False on deadlock.TF)acquireDeadlockError)lockr   s    r   _acquirezDDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>._acquireL   s0      %% s    &&c                      j                         \  } } |       }j                           |      }j                  ||f       |r|j                          |r| j                          y y r   )popwaitappendrelease)abrarbr>   barrierpairsresultss       r   fz=DeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.fV   sZ    99;DAq!BLLN!BNNB8$				 r   )	ranger   str	threadingBarrierr   BunchassertEquallen)r   create_deadlockNLOCKSilocksNTHREADSrK   r>   rH   rI   rJ   s   `      @@@@r   run_deadlock_avoidance_testz2DeadlockAvoidanceTests.run_deadlock_avoidance_testA   s    05f>1s1v&>>:?-HQ%(E1Q3,/0HHzH##H-			 a* 		Wx0A ?H8	 	s   !C
C#CCc                     | j                  d      }|j                  d      }| j                  |d       | j                  |j                  d      t	        |      |z
         y )NTTFr9   TT)rX   countassertGreaterEqualrQ   rR   )r   rJ   nb_deadlockss      r   test_deadlockz$DeadlockAvoidanceTests.test_deadlocke   sT    2248 }}]3a0|4c'l\6QRr   c                     | j                  d      }| j                  |j                  d      d       | j                  |j                  d      t        |             y )NFrZ   r   r[   )rX   rQ   r\   rR   )r   rJ   s     r   test_no_deadlockz'DeadlockAvoidanceTests.test_no_deadlockn   sH    2259}5q9|4c'lCr   N)r   r   r   r5   r   rX   r_   ra   r+   r   r   r-   r-   4   s    +;"HSDr   r-   )r   r<   c                   (    e Zd Zed        Zd Zd Zy)LifetimeTestsc                 .    | j                   j                  S r   )r   r   r4   s    r   	bootstrapzLifetimeTests.bootstrap   s    yy###r   c                    d}| j                  || j                  j                         | j                  j                  |      }| j	                  || j                  j                         t        j                  |      }~t        j                          | j                  || j                  j                         | j                   |              y )Nxyzzy)
assertNotInre   _module_locks_get_module_lockassertInweakrefrefr   
gc_collectassertIsNone)r   namer=   wrs       r   test_lock_lifetimez LifetimeTests.test_lock_lifetime   s    t~~;;<~~..t4dDNN889[[t~~;;<"$r   c                     t        j                          | j                  dt        | j                  j
                        | j                  j
                         y )Nr   )r   rn   rQ   rR   re   ri   r4   s    r   test_all_lockszLifetimeTests.test_all_locks   s<    C < <=55	7r   N)r   r   r   propertyre   rr   rt   r+   r   r   rc   rc   ~   s    $ $	 7r   rc   )r   c                  t    t        j                         } t        j                  t         j                  g|   y r   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r   setUpModuler|      s*    "224K.@@O;Or   __main__)#test.test_importlibr   	test_utilimport_importlibr   r/   rN   rx   rl   testr   test.supportr   r   requires_working_threadingr
   itemsr   _ModuleLock
LOCK_TYPES	test_both
RLockTestsFrozen_ModuleLockAsRLockTestsSource_ModuleLockAsRLockTestsr-   _DeadlockErrorDEADLOCK_ERRORSFrozen_DeadlockAvoidanceTestsSource_DeadlockAvoidanceTestsrc   Frozen_LifetimeTestsSource_LifetimeTestsr|   r   main)kindr   s   00r   <module>r      si   1!y!!+. 
     )  ,  + +4 86 64 &*ZZ\3!$	 I((444 3

 Y/1F1F",.
=D =DB +/**,8&tY --<<< 8
 Y/",'687 72 YT2P
 zHMMO i3R8s   +!E!E