DƔSrSSKrSSKrSSKrSSKrSSKJr SSKrSSK r \RSSS:Xa\R"S\R-5e\R"5r \R"5r\R R"S:H=(a \R R$S:HrS rS rS r\R."5"S S \R055rSr\S:Xa\R8"5 gg)z6PyUnit testing that threads honor our signal semanticsN)threading_helperwinzCan't test signal on %spthreadz mutex+condc[R"[RU5n[R"[RU5n[R"[RU5nX4U4$N)signalSIGUSR1SIGUSR2SIGALRM)for_usr1for_usr2for_alrmusr1usr2alrms >/opt/alt/python313/lib64/python3.13/test/test_threadsignals.pyregisterSignalsrsI == 2D == 2D == 2D t cj[US==S- ss'[R"5[US'gNtripped tripped_by)signal_blackboardthread get_ident)sigframes rhandle_signalsr s0c9%*%+1+;+;+=c<(rc[R"[R5 [R"[R5 [R 5 gr)r raise_signalr r signalled_allreleaserr send_signalsr&"s4  ' 'rc\rSrSrSrSrSr\R"\ S5\R"\ RRS5=(a \ RR(+S5\R"\ RRS5S 5S 555r\R"\ S5\R"\ RRS5=(a \ RR(+S5\R"\ RRS5S 5S 555rS rS rSrSrSrg) ThreadSignals,c[R"5 [R5 UR 5 [R5 SSS5 UR [ [RSS5 UR [ [RS[R"55 UR [ [RSS5 UR [ [RS[R"55 [R5 g!,(df  N=fr) rwait_threads_exitr#acquirespawnSignallingThread assertEqualrr r rrr r$selfs r test_signalsThreadSignals.test_signals/s  / / 1  ! ! #  & & (  ! ! #2 +FNN;IFJ +FNN;LI!++- / +FNN;IFJ +FNN;LI!++- /2 1s 9D:: Ec:[R"[S5 g)Nr%)rstart_new_threadr&r/s rr-#ThreadSignals.spawnSignallingThreadAs b1rc[er)KeyboardInterrupt)r0rrs ralarm_interruptThreadSignals.alarm_interruptDsrz/POSIX condition variables cannot be interruptedlinuxzBIssue 34004: musl does not allow interruption of locks by signals.openbsdz%lock cannot be interrupted on OpenBSDc[R"[RUR5n[R"5nUR 5 [R "S5 [R"5nUR[UR SS9 [R"5U- nURUS5 [R "S5 [R"[RU5 g![R "S5 [R"[RU5 f=f)Nrtimeout@r) r r r8r allocate_lockr,alarmtime monotonic assertRaisesr7 assertLess)r0oldalrmlockt1dts rtest_lock_acquire_interruption,ThreadSignals.test_lock_acquire_interruptionGs--0D0DE 3'')D LLN LLO!B   /q  I!B&B OOB $ LLO MM&..' 2 LLO MM&..' 2s BD=Ec^[R"[RUR5n[R"5mU4Sjn[ R "5 [R"US5 TRSS9(a<TR5 [R"S5 TRSS9(aM<[R"S5 [R"5nUR[TRSS9 [R"5U- nUR!US 5 SSS5 [R"S 5 [R"[RU5 g!,(df  NJ=f![R"S 5 [R"[RU5 f=f) Nc&>TR5 gr)r,)rlocksr other_threadCThreadSignals.test_rlock_acquire_interruption..other_threadys  rr%Fblocking{Gz?rr=r>r@r)r r r8rRLockrr+r4r,r$rCsleeprBrDrEr7rF)r0rGrPrIrJrOs @rtest_rlock_acquire_interruption-ThreadSignals.test_rlock_acquire_interruptionfs'--0D0DE 3LLNE "335'' b9mmUm3MMOJJt$mmUm33 Q^^%!!"3U]]A!N^^%*C(6 LLO MM&..' 265 LLO MM&..' 2s+0F"A&F A4F>F F F=Gc^^STlU4Sjn[R"[RU5nU4Sjn[R"5 [ R "US5 TRSS9(a<TR5 [R"S5 TRSS9(aM<TR5nTRTR5 TRU5 SSS5 [R"[RU5 g!,(df  N4=f![R"[RU5 f=f)NFc>STlg)NT) sig_recvd)r rr0s r my_handler9ThreadSignals.acquire_retries_on_intr..my_handlers !DNrc>TR5 [R"S5 [R"[ [ R5 [R"S5 TR5 g)N?) r,rCrVoskill process_pidr r r$)rHsrrP;ThreadSignals.acquire_retries_on_intr..other_threadsC  3 V^^4 3 rr%rRrT) r[r r rr+rr4r,r$rCrV assertTrue)r0rHr\ old_handlerrPresults`` racquire_retries_on_intr%ThreadSignals.acquire_retries_on_intrs "mmFNNJ?  7 "335'' b9llEl2LLNJJt$llEl22/'6 MM&..+ 665 MM&..+ 6s*D4A&D#9T=RS- slg)Nr) sigs_recvd)signumrr0s rr\@ThreadSignals.test_interrupted_timed_acquire..my_handlers OOq Orc>[R"5TlTRSS9 [R"5Tlg)Nr_r>)rCrDstartr,end)rHr0sr timed_acquireCThreadSignals.test_interrupted_timed_acquire..timed_acquires-!^^-  S )>>+rc>[S5HBn[R"S5 [R"[ [ R5 MD TR5 g)N(g{Gz?) rangerCrVr`rarbr r r$)_dones rr&BThreadSignals.test_interrupted_timed_acquire..send_signalss:rAJJt$GGK8# rr%g@g333333?) rurvrqrrAr,r r rr+r4rF assertGreater)r0r\rerwr&r}rHs` @@rtest_interrupted_timed_acquire,ThreadSignals.test_interrupted_timed_acquires# ##% ##%  !mmFNNJ?  7 ,  "335'' b9 4:: 5s;""488djj#8#>""4??A66 MM&..+ 665 MM&..+ 6s%"F 1BE<F < F F 'F4)rvr[rqruN)__name__ __module__ __qualname____firstlineno__r1r-r8unittestskipIfUSING_PTHREAD_CONDsysplatform startswith thread_infoversionrKrWrgrjrmr__static_attributes__r%rrr(r(,s6 $2 __'FH __S\\,,W51000#$ __S\\,,Y7<>3> $H3,__'FH __S\\,,W51000#$ __S\\,,Y7<>3> $H3:7@=5,7rr(c[RSSS.[RSSS.[RSSS.0q[ [ [ [ 5n[R"[ /UQ76 g)Nr)rr) r r r r rrr raddModuleCleanup)oldsigss r setUpModulersZ!..q+K ..q+K ..q+KNnnnMG o88r__main__)__doc__rr r`r test.supportr_threadrrCrSkipTestgetpidrbrAr#rnamerHrrr r&requires_working_threadingTestCaser(rrmainr%rrrs< ) LL!   5 D EEiik ""$ oo**i7?//..,>> ,,.q7H%%q7/q7h9 z MMOr