+
    Bi|'                        R t ^ 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]P0                  4      4       tR t]R8X  d   ]P8                  ! 4        R# R# )z6PyUnit testing that threads honor our signal semanticsN)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   r5   r   allocate_lockr)   alarmtime	monotonicassertRaisesr4   
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   r5   r   RLockr   r(   r1   r)   r"   r@   sleepr?   rA   rB   r4   rC   )r-   rD   rM   rF   rG   rL   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)   r@   rS   oskillprocess_pidr   r	   r"   )rE   s   r   rM   ;ThreadSignals.acquire_retries_on_intr.<locals>.other_thread   sC      

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

3r   rO   rQ   Nr#   )rX   r   r	   r   r(   r   r1   r)   r"   r@   rS   
assertTrue)r-   rE   rY   old_handlerrM   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   )rd   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   )rd   r   rR   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   rY   @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)r@   rA   startr)   end)rE   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)	ranger@   rS   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#   )rr   rs   rn   r   r>   r)   r   r	   r   r(   r1   rC   assertGreater)r-   rY   rb   rt   r$   rz   rE   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)rs   rX   rn   rr   N)__name__
__module____qualname____firstlineno__r.   r*   r5   unittestskipIfUSING_PTHREAD_CONDsysplatform
startswiththread_infoversionrH   rT   rd   rg   rj   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__)__doc__r   r   r]   r   test.supportr   _threadr   r@   r   SkipTestgetpidr_   r>   r!   r   namerE   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   