
    0hh|'                        S SK r S SKrS SKrS SKrS SKJr  S SKrS SKr\R                  SS S:X  a  \ R                  " S\R                  -  5      e\R                  " 5       r\R                  " 5       r\R                  R                   S:H  =(       a    \R                  R"                  S:H  rS rS	 rS
 r\R,                  " 5        " S S\ R.                  5      5       rS r\S:X  a  \ R6                  " 5         gg)    N)threading_helper   winzCan't test signal on %spthreadz
mutex+condc                     [         R                   " [         R                  U 5      n[         R                   " [         R                  U5      n[         R                   " [         R                  U5      nX4U4$ N)signalSIGUSR1SIGUSR2SIGALRM)for_usr1for_usr2for_alrmusr1usr2alrms         @/opt/python-3.13.8/usr/lib/python3.13/test/test_threadsignals.pyregisterSignalsr      sI    ==2D==2D==2Dt    c                 j    [         U    S==   S-  ss'   [        R                  " 5       [         U    S'   g Ntripped   
tripped_by)signal_blackboardthread	get_ident)sigframes     r   handle_signalsr       s0    c9%*%+1+;+;+=c<(r   c                      [         R                  " [         R                  5        [         R                  " [         R                  5        [        R                  5         g r   )r	   raise_signalr
   r   signalled_allrelease r   r   send_signalsr&   "   s4    
 '
'r   c                      \ rS rSrS rS rS r\R                  " \	S5      \R                  " \
R                  R                  S5      =(       a    \
R                  R                  (       + S5      \R                  " \
R                  R                  S5      S	5      S
 5       5       5       r\R                  " \	S5      \R                  " \
R                  R                  S5      =(       a    \
R                  R                  (       + S5      \R                  " \
R                  R                  S5      S	5      S 5       5       5       rS rS rS rS rSrg)ThreadSignals,   c                    [         R                  " 5          [        R                  5         U R	                  5         [        R                  5         S S S 5        U R                  [        [        R                     S   S5        U R                  [        [        R                     S   [        R                  " 5       5        U R                  [        [        R                     S   S5        U R                  [        [        R                     S   [        R                  " 5       5        [        R                  5         g ! , (       d  f       N= fr   )r   wait_threads_exitr#   acquirespawnSignallingThreadassertEqualr   r	   r
   r   r   r   r$   selfs    r   test_signalsThreadSignals.test_signals/   s    //1
 !!#&&(!!# 2 	+FNN;IFJ+FNN;LI!++-	/+FNN;IFJ+FNN;LI!++-	/ 21s   9D::
Ec                 :    [         R                  " [        S5        g )Nr%   )r   start_new_threadr&   r/   s    r   r-   #ThreadSignals.spawnSignallingThreadA   s    b1r   c                     [         er   )KeyboardInterrupt)r0   r   r   s      r   alarm_interruptThreadSignals.alarm_interruptD   s    r   z/POSIX condition variables cannot be interruptedlinuxzBIssue 34004: musl does not allow interruption of locks by signals.openbsdz%lock cannot be interrupted on OpenBSDc                    [         R                   " [         R                  U R                  5      n [        R                  " 5       nUR                  5         [         R                  " S5        [        R                  " 5       nU R                  [        UR
                  SS9  [        R                  " 5       U-
  nU R                  US5        [         R                  " S5        [         R                   " [         R                  U5        g ! [         R                  " S5        [         R                   " [         R                  U5        f = f)Nr      timeout      @r   )r	   r   r8   r   allocate_lockr,   alarmtime	monotonicassertRaisesr7   
assertLess)r0   oldalrmlockt1dts        r   test_lock_acquire_interruption,ThreadSignals.test_lock_acquire_interruptionG   s     --0D0DE	3'')DLLNLLO!B/qI!B&B
 OOB$LLOMM&..'2 LLOMM&..'2s   BD =Ec                   ^ [         R                   " [         R                  U R                  5      n [        R                  " 5       mU4S jn[
        R                  " 5          [        R                  " US5        TR                  SS9(       a<  TR                  5         [        R                  " S5        TR                  SS9(       a  M<  [         R                  " S5        [        R                  " 5       nU R                  [        TR                  SS9  [        R                  " 5       U-
  nU R!                  US	5        S S S 5        [         R                  " S
5        [         R                   " [         R                  U5        g ! , (       d  f       NJ= f! [         R                  " S
5        [         R                   " [         R                  U5        f = f)Nc                  &   > T R                  5         g r   )r,   )rlocks   r   other_threadCThreadSignals.test_rlock_acquire_interruption.<locals>.other_thready   s    r   r%   Fblocking{Gz?r   r=   r>   r@   r   )r	   r   r8   r   RLockr   r+   r4   r,   r$   rC   sleeprB   rD   rE   r7   rF   )r0   rG   rP   rI   rJ   rO   s        @r   test_rlock_acquire_interruption-ThreadSignals.test_rlock_acquire_interruptionf   s'    --0D0DE	3LLNE  "335''b9mmUm3MMOJJt$ mmUm33 Q^^%!!"3U]]A!N^^%*C( 6 LLOMM&..'2 65 LLOMM&..'2s+   0F "A&F
A4F>F 
FF =Gc                   ^ ^ ST l         U 4S jn[        R                  " [        R                  U5      n U4S jn[        R                  " 5          [
        R                  " US5        TR                  SS9(       a<  TR                  5         [        R                  " S5        TR                  SS9(       a  M<  TR                  5       nT R                  T R                   5        T R                  U5        S S S 5        [        R                  " [        R                  U5        g ! , (       d  f       N4= f! [        R                  " [        R                  U5        f = f)NFc                    > STl         g )NT)	sig_recvd)r	   r   r0   s     r   
my_handler9ThreadSignals.acquire_retries_on_intr.<locals>.my_handler   s
    !DNr   c                     > T R                  5         [        R                  " S5        [        R                  " [
        [        R                  5        [        R                  " S5        T R                  5         g )N      ?)	r,   rC   rV   oskillprocess_pidr	   r
   r$   )rH   s   r   rP   ;ThreadSignals.acquire_retries_on_intr.<locals>.other_thread   sC      

3V^^4 

3r   r%   rR   rT   )r[   r	   r
   r   r+   r   r4   r,   r$   rC   rV   
assertTrue)r0   rH   r\   old_handlerrP   results   ``    r   acquire_retries_on_intr%ThreadSignals.acquire_retries_on_intr   s    	" mmFNNJ?	7 "335''b9llEl2LLNJJt$ llEl22 /' 6 MM&..+6 65 MM&..+6s*   D4 A&D#9<D#5D4 #
D1-D4 4'Ec                 L    U R                  [        R                  " 5       5        g r   )rg   r   rA   r/   s    r   !test_lock_acquire_retries_on_intr/ThreadSignals.test_lock_acquire_retries_on_intr   s    $$V%9%9%;<r   c                 L    U R                  [        R                  " 5       5        g r   )rg   r   rU   r/   s    r   "test_rlock_acquire_retries_on_intr0ThreadSignals.test_rlock_acquire_retries_on_intr   s    $$V\\^4r   c                 n  ^ ^^ S T l         S T l        ST l        [        R                  " 5       mTR                  5         [        R                  " 5       mTR                  5         U 4S jn[        R                  " [        R                  U5      n UU 4S jnU4S jn[        R                  " 5          [        R                  " US5        U" 5         TR                  5         T R                  T R                  T R                   -
  S5        T R                  T R                  T R                   -
  S5        T R                  T R                  S5        S S S 5        [        R                  " [        R                  U5        g ! , (       d  f       N4= f! [        R                  " [        R                  U5        f = f)Nr   c                 0   > T=R                   S-  sl         g )Nr   )
sigs_recvd)signumr   r0   s     r   r\   @ThreadSignals.test_interrupted_timed_acquire.<locals>.my_handler   s    OOq Or   c                     > [         R                  " 5       Tl        T R                  SS9  [         R                  " 5       Tl        g )Nr_   r>   )rC   rD   startr,   end)rH   r0   s   r   timed_acquireCThreadSignals.test_interrupted_timed_acquire.<locals>.timed_acquire   s-    !^^-
S)>>+r   c                     > [        S5       HB  n [        R                  " S5        [        R                  " [
        [        R                  5        MD     TR                  5         g )N(   g{Gz?)	rangerC   rV   r`   ra   rb   r	   r
   r$   )_dones    r   r&   BThreadSignals.test_interrupted_timed_acquire.<locals>.send_signals   s:    rAJJt$GGK8 # r   r%   g       @g333333?)ru   rv   rq   r   rA   r,   r	   r
   r   r+   r4   rF   assertGreater)r0   r\   re   rw   r&   r}   rH   s   `    @@r   test_interrupted_timed_acquire,ThreadSignals.test_interrupted_timed_acquire   s#    
##%##%	!mmFNNJ?	7, "335 ''b94:: 5s;""488djj#8#> ""4??A6 6 MM&..+6 65 MM&..+6s%   "F 1BE<F <
F
F 'F4)rv   r[   rq   ru   N)__name__
__module____qualname____firstlineno__r1   r-   r8   unittestskipIfUSING_PTHREAD_CONDsysplatform
startswiththread_infoversionrK   rW   rg   rj   rm   r   __static_attributes__r%   r   r   r(   r(   ,   s6    $2  __'FH__S\\,,W5 1000#$
 __S\\,,Y7<>3>$H3, __'FH__S\\,,W5 1000#$
 __S\\,,Y7<>3>$H3:7@=5,7r   r(   c                      [         R                  SSS.[         R                  SSS.[         R                  SSS.0q[        [        [        [        5      n [        R                  " [
        /U Q76   g )Nr   )r   r   )	r	   r
   r   r   r   r   r    r   addModuleCleanup)oldsigss    r   setUpModuler      sZ     !..q+K ..q+K ..q+KN nnnMGo88r   __main__)r   r	   r`   r   test.supportr   _threadr   rC   r   SkipTestgetpidrb   rA   r#   r   namerH   r   r   r    r&   requires_working_threadingTestCaser(   r   r   mainr%   r   r   <module>r      s      	 
 )  LL!


5D
EEiik""$oo**i7 ?//..,> >
 ,,.q7H%% q7 /q7h9 zMMO r   