+
    Bi|'                        ^ RI t ^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIt]P                  R,          R8X  d$   ] P                  ! R]P                  ,          4      h]P                  ! 4       t]P                  ! 4       t]P                  P                   R8H  ;'       d    ]P                  P"                  R8H  tR tR	 tR
 t]P,                  ! 4        ! R R] P.                  4      4       tR t]R8X  d   ] P6                  ! 4        R# R# )    N)threading_helper:N   NwinzCan't test signal on %spthreadz
mutex+condc                     \         P                   ! \         P                  V 4      p\         P                   ! \         P                  V4      p\         P                   ! \         P                  V4      pW4V3# N)signalSIGUSR1SIGUSR2SIGALRM)for_usr1for_usr2for_alrmusr1usr2alrms   &&&   ./usr/lib/python3.14/test/test_threadsignals.pyregisterSignalsr      sI    ==2D==2D==2Dt    c                     \         V ,          R ;;,          ^,          uu&   \        P                  ! 4       \         V ,          R&   R# tripped
tripped_byN)signal_blackboardthread	get_ident)sigframes   &&r   handle_signalsr      s0    c9%*%+1+;+;+=c<(r   c                      \         P                  ! \         P                  4       \         P                  ! \         P                  4       \        P                  4        R # r   )r	   raise_signalr
   r   signalled_allrelease r   r   send_signalsr%   "   s4    
 '
'r   c                     a  ] tR t^,t o R tR tR t]P                  ! ]	R4      ]P                  ! ]
P                  P                  R4      ;'       d    ]
P                  P                  '       * R4      ]P                  ! ]
P                  P                  R4      R4      R	 4       4       4       t]P                  ! ]	R4      ]P                  ! ]
P                  P                  R4      ;'       d    ]
P                  P                  '       * R4      ]P                  ! ]
P                  P                  R4      R4      R
 4       4       4       tR tR tR tR tRtV tR# )ThreadSignalsc                   \         P                  ! 4       ;_uu_ 4        \        P                  4        V P	                  4        \        P                  4        R R R 4       V P                  \        \        P                  ,          R,          ^4       V P                  \        \        P                  ,          R,          \        P                  ! 4       4       V P                  \        \        P                  ,          R,          ^4       V P                  \        \        P                  ,          R,          \        P                  ! 4       4       \        P                  4        R #   + '       g   i     EL; i)Nr   r   )r   wait_threads_exitr"   acquirespawnSignallingThreadassertEqualr   r	   r
   r   r   r   r#   selfs   &r   test_signalsThreadSignals.test_signals/   s    //11
 !!#&&(!!# 2 	+FNN;IFJ+FNN;LI!++-	/+FNN;IFJ+FNN;LI!++-	/ 211s   9E##E4	c                <    \         P                  ! \        R4       R # )Nr$   )r   start_new_threadr%   r-   s   &r   r+   #ThreadSignals.spawnSignallingThreadA   s    b1r   c                    \         hr   )KeyboardInterrupt)r.   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                   \         P                   ! \         P                  V P                  4      p \        P                  ! 4       pVP                  4        \         P                  ! ^4       \        P                  ! 4       pV P                  \        VP
                  ^R7       \        P                  ! 4       V,
          pV P                  VR4       \         P                  ! ^ 4       \         P                   ! \         P                  V4       R#   \         P                  ! ^ 4       \         P                   ! \         P                  T4       i ; i)   timeout      @N)r	   r   r6   r   allocate_lockr*   alarmtime	monotonicassertRaisesr5   
assertLess)r.   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                  a \         P                   ! \         P                  V P                  4      p \        P                  ! 4       oV3R  lp\
        P                  ! 4       ;_uu_ 4        \        P                  ! VR4       SP                  RR7      '       d)   SP                  4        \        P                  ! R4       K@  \         P                  ! ^4       \        P                  ! 4       pV P                  \        SP                  ^R7       \        P                  ! 4       V,
          pV P!                  VR4       RRR4       \         P                  ! ^ 4       \         P                   ! \         P                  V4       R#   + '       g   i     LM; i  \         P                  ! ^ 4       \         P                   ! \         P                  T4       i ; i)c                  (   < S P                  4        R # r   )r*   )rlocks   r   other_threadCThreadSignals.test_rlock_acquire_interruption.<locals>.other_thready   s    r   Fblocking{Gz?r<   r>   Nr$   )r	   r   r6   r   RLockr   r)   r2   r*   r#   rA   sleepr@   rB   rC   r5   rD   )r.   rE   rN   rG   rH   rM   s   &    @r   test_rlock_acquire_interruption-ThreadSignals.test_rlock_acquire_interruptionf   s    --0D0DE	3LLNE  "3355''b9mmUm33MMOJJt$Q^^%!!"3U]]A!N^^%*C( 6 LLOMM&..'2 65 LLOMM&..'2s*   8F */FB#F=F F	F =Gc                  a a R S n         V 3R lp\        P                  ! \        P                  V4      p V3R lp\        P                  ! 4       ;_uu_ 4        \
        P                  ! VR4       SP                  R R7      '       d)   SP                  4        \        P                  ! R4       K@  SP                  4       pS P                  S P                   4       S P                  V4       RRR4       \        P                  ! \        P                  V4       R#   + '       g   i     L7; i  \        P                  ! \        P                  T4       i ; i)Fc                    < R Sn         R# )TN)	sig_recvd)r	   r   r.   s   &&r   
my_handler9ThreadSignals.acquire_retries_on_intr.<locals>.my_handler   s
    !DNr   c                     < S P                  4        \        P                  ! R 4       \        P                  ! \
        \        P                  4       \        P                  ! R 4       S P                  4        R# )      ?N)	r*   rA   rT   oskillprocess_pidr	   r
   r#   )rF   s   r   rN   ;ThreadSignals.acquire_retries_on_intr.<locals>.other_thread   sC      

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

3r   rP   rR   Nr$   )rY   r	   r
   r   r)   r   r2   r*   r#   rA   rT   
assertTrue)r.   rF   rZ   old_handlerrN   results   ff    r   acquire_retries_on_intr%ThreadSignals.acquire_retries_on_intr   s    	" mmFNNJ?	7 "3355''b9llEl22LLNJJt$/' 6 MM&..+6 65 MM&..+6s*   #D/ /D	A$D-D/ D,	'D/ /'Ec                N    V P                  \        P                  ! 4       4       R # r   )re   r   r?   r-   s   &r   !test_lock_acquire_retries_on_intr/ThreadSignals.test_lock_acquire_retries_on_intr   s    $$V%9%9%;<r   c                N    V P                  \        P                  ! 4       4       R # r   )re   r   rS   r-   s   &r   "test_rlock_acquire_retries_on_intr0ThreadSignals.test_rlock_acquire_retries_on_intr   s    $$V\\^4r   c                  a aa R S n         R S n        ^ S n        \        P                  ! 4       oSP                  4        \        P                  ! 4       oSP                  4        V 3R lp\        P                  ! \        P                  V4      p VV 3R lpV3R lp\        P                  ! 4       ;_uu_ 4        \        P                  ! VR4       V! 4        SP                  4        S P                  S P                  S P                   ,
          R4       S P                  S P                  S P                   ,
          R4       S P                  S P                  ^ 4       R R R 4       \        P                  ! \        P                  V4       R #   + '       g   i     L7; i  \        P                  ! \        P                  T4       i ; i)Nc                 :   < S;P                   ^,          un         R# )r;   N)
sigs_recvd)signumr   r.   s   &&r   rZ   @ThreadSignals.test_interrupted_timed_acquire.<locals>.my_handler   s    OOq Or   c                     < \         P                  ! 4       Sn        S P                  R R7       \         P                  ! 4       Sn        R# )r]   r<   N)rA   rB   startr*   end)rF   r.   s   r   timed_acquireCThreadSignals.test_interrupted_timed_acquire.<locals>.timed_acquire   s-    !^^-
S)>>+r   c                     < \        ^(4       FB  p \        P                  ! R4       \        P                  ! \
        \        P                  4       KD  	  SP                  4        R# )(   g{Gz?N)	rangerA   rT   r^   r_   r`   r	   r
   r#   )_dones    r   r%   BThreadSignals.test_interrupted_timed_acquire.<locals>.send_signals   s:    rAJJt$GGK8 # r   g       @g333333?r$   )rs   rt   ro   r   r?   r*   r	   r
   r   r)   r2   rD   assertGreater)r.   rZ   rc   ru   r%   r{   rF   s   f    @@r   test_interrupted_timed_acquire,ThreadSignals.test_interrupted_timed_acquire   s&    
##%##%	!mmFNNJ?	7, "3355 ''b94:: 5s;""488djj#8#> ""4??A6 6 MM&..+6 65 MM&..+6s%   *F  9B%FF  F	F   'G)rt   rY   ro   rs   N)__name__
__module____qualname____firstlineno__r/   r+   r6   unittestskipIfUSING_PTHREAD_CONDsysplatform
startswiththread_infoversionrI   rU   re   rh   rk   r~   __static_attributes____classdictcell__)__classdict__s   @r   r'   r'   ,   sH     $2  __'FH__S\\,,W5 1 1000#$
 __S\\,,Y7<>3>$H3, __'FH__S\\,,W5 1 1000#$
 __S\\,,Y7<>3>$H3:7@=5,7 ,7r   r'   c            	          \         P                  R ^ R^ /\         P                  R ^ R^ /\         P                  R ^ R^ //s\        \        \        \        4      p \        P                  ! \
        .V O5!   R# r   )	r	   r
   r   r   r   r   r   r   addModuleCleanup)oldsigss    r   setUpModuler      sf     !..Iq,+K ..Iq,+K ..Iq,+KN nnnMGo88r   __main__)r   r	   r^   r   test.supportr   _threadr   rA   r   SkipTestgetpidr`   r?   r"   r   namerF   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   