
    ,hN                        d dl mZ d dlZd dlmZmZ d dlZd dlZd dlm	Z	 ddl
mZ ddlmZmZmZ erd dlmZ dd	Zdd
ZddZddZddZddZddZddZddZy)    )annotationsN)TYPE_CHECKINGNoReturn)RaisesGroup   )_core)_signal_handlerget_pending_signal_countopen_signal_receiver)	FrameTypec                   K   t        j                  t         j                        } t        t         j                        5 }t        j                  t         j                         t        j                  t         j                         t        j                          d {    t        j                  t         j                         t        j                          d {    |2 3 d {   }|t         j                  k(  sJ  t        |      dk(  sJ t        j                  t         j                         |2 3 d {   }|t         j                  k(  sJ  t        |      dk(  sJ 	 d d d        t        j                  t              5  j                          d {    d d d        t        j                  t         j                        | u sJ y 7 47 7 6 7 6 # 1 sw Y   xxY w7 M# 1 sw Y   LxY ww)Nr   )signal	getsignalSIGILLr   raise_signalr   wait_all_tasks_blockedr
   pytestraisesRuntimeError	__anext__)origreceiversignums      Z/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_tests/test_signals.pytest_open_signal_receiverr      s    FMM*D	fmm	, 7 	FMM*FMM***,,,FMM***,,,$ 	 	&V]]**'1Q66FMM*$ 	 	&V]]**'1Q666!7" 
|	$ #  """#FMM*d222 	-,	H
	H7 7$ 	## #s   =G8AGG>GGG#G'G(G+AG7G;G<G?'G'!G8G,G*G,!0G8GGGGGGG'#G8*G,,G51G8c                 `  K   t        j                  t         j                        } t        j                  t
        d      5  t        t         j                  d      5  	 d d d        d d d        t        j                  t         j                        | u sJ y # 1 sw Y   9xY w# 1 sw Y   =xY ww)Nz2(signal number out of range|invalid signal value)$matchi )r   r   r   r   r   
ValueErrorr   r   s    r   >test_open_signal_receiver_restore_handler_after_one_bad_signalr!   *   s     FMM*D	C
  "&--9 			 FMM*d222	 		 s5   ?B.B"BB"&0B.B	B""B+'B.c                     t        j                  t        d      5  t               5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NzNo signals were providedr   )r   r   	TypeErrorr        r   $test_open_signal_receiver_empty_failr&   6   sI    	y(B	C !# 		 	 	 s   A:AA	AAc                   K   t        j                  t         j                        } t        t         j                  t         j                        5  	 d d d        t        j                  t         j                        | u sJ y # 1 sw Y   1xY wwN)r   r   r   r   r    s    r   @test_open_signal_receiver_restore_handler_after_duplicate_signalr)   <   sb     FMM*D	fmmV]]	;  FMM*d222 s   ABB 0B B	Bc                    K   dd} t        j                  t              5  t        j                  j                  t        j                  |        d {    d d d        y 7 # 1 sw Y   y xY ww)Nc                 j   K   t        t        j                        5  	 d d d        y # 1 sw Y   y xY wwr(   )r   r   SIGINTr$   r%   r   naughtyz0test_catch_signals_wrong_thread.<locals>.naughtyE   s)     !&--0 		 	 	s   3'	303returnNone)r   r   r   trio	to_threadrun_syncrun)r-   s    r   test_catch_signals_wrong_threadr5   D   sT      
|	$ 9nn%%dhh8889 989 9s.   A.2A"A A"	A. A""A+'A.c            	       K   t        t        j                        5  t        t        j
                        5 } t        j                         4 d {   }|j                  | j                         |j                  | j                         d d d       d {    d d d        d d d        y 7 [7 # 1 d {  7  sw Y   'xY w# 1 sw Y   +xY w# 1 sw Y   y xY wwr(   )	r   r1   BusyResourceErrorr   r   r   open_nursery
start_soonr   )r   nurserys     r   "test_open_signal_receiver_conflictr;   M   s     	T++	, 7!&--0 	7H((* 7 7g""8#5#56""8#5#567 7	77 77 7 7 7 7	7 	77 7s{   CCCB+
C7B/
CB-CC"	C+C-C/C5B86C=CC		CCCc                    K   t        j                         } t        j                         }|j	                  | j
                  d       | j                          d {    y 7 w)NT)
idempotent)r1   Eventr   current_trio_tokenrun_sync_soonsetwait)evtokens     r   +wait_run_sync_soon_idempotent_queue_barrierrE   W   sC     	B$$&E	40
'')OOs   AA#A!A#c                 4  K   t        t        j                  t        j                        5 } 	 t	        t        j
                  t        j                               d }t        d      D ]  }t        j                  t        j                         t        j                  t        j                         t                d {    || j                          d {   }v| j                          d {   }|t        j                  t        j                  fv sJ ||k7  sJ |} t        |       dk7  r'| j                          d {    t        |       dk7  r'd d d        y 7 7 7 u7 "# t        $ r dd l}|j                          Y 0w xY w# 1 sw Y   y xY ww)N
   r   )r   r   r   SIGFPEprintr   ranger   rE   r   r
   BaseException	traceback	print_exc)r   previous_gotrL   s        r   'test_open_signal_receiver_no_starvationrQ   ^   sL     
fmmV]]	; "x	"&""6==12H2Y 
###FMM2##FMM2ACCC#%-%7%7%99H ( 2 2 44C6==&--"@@@(?*"H
# +849((*** +849!" " D94 + 	" !	"%" "s   )FFBE)<E!=E)E#E)/E%0AE)E'E)	F!E)#E)%E)'E))F	FF		FFFc                 
  K   t               dfd} t        d       t        t        j                  t        j
                  h|       5  t        t        j                  t        j
                        5 }t        j                  t        j                         t        j                  t        j
                         d d d        t                d {    d d d        t        j                  t        j
                  hk(  sJ j                          t        d       t        t        j                  t        j
                  h|       5  t        t        j                  t        j
                        5 }t        j                  t        j                         t        j                  t        j
                         t                d {    t        |      dk(  sJ 	 d d d        d d d        t        j                  t        j
                  hk(  sJ j                          t        d       t        t        j                  ht        j                        5  t        t        j                        5 }t        j                  t        j                         d d d        t                d {    d d d        t        d       t        t        j                  ht        j                        5  t        t        j                        5 }t        j                  t        j                         t                d {    t        |      dk(  sJ 	 d d d        d d d        d	d}t        t        j                  t        j
                  h|      5  t        j                  t              5 }t        t        j                  t        j
                        5 }t        j                  t        j                         t        j                  t        j
                         t                d {    t        |      dk(  sJ 	 d d d        d d d        j                  }|j                   d   h}t#        |j$                  t              sJ |j'                  |j$                  j                   d          |t        j                  t        j
                  hk(  sJ 	 d d d        y # 1 sw Y   xY w7 # 1 sw Y   xY w7 +# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w7 s# 1 sw Y   sxY w7 # 1 sw Y   xY w# 1 sw Y   xY w7 )# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY ww)
Nc                (    j                  |        y r(   )add)signoframedelivered_directlys     r   direct_handlerzAtest_catch_signals_race_condition_on_exit.<locals>.direct_handler   s    u%r%      r         c                    t        |       r(   )r   )r   rV   s     r   raise_handlerz@test_catch_signals_race_condition_on_exit.<locals>.raise_handler   s    6""r%   r   )rU   intrV   FrameType | Noner/   r0   )r   r^   rV   r_   r/   r   )rA   rI   r	   r   r   rH   r   r   rE   clearr
   SIG_IGNr   r   r   valueargs
isinstance__context__rT   )rX   r   r]   excinfoexcsignumsrW   s         @r   )test_catch_signals_race_condition_on_exitri   }   s    #&5& 
!H 
&--7	H <!&--? 	/8..	/ :;;;	<
 &--!???	!H 
&--7	H ;!&--? 	;8..=???+H5:::		;; &--!??? 
!H	&--&..	9 <!&--0 	/H.	/9;;;< 
!H	&--&..	9 ;!&--0 	;H.=???+H5:::	;;# 
&--7	G 9]]<( 	?G%fmmV]]C ?x##FMM2##FMM2ACCC/9Q>>>	?	? mm88A;-#//<88COO((+,6==&--88889 9S	/ 	/ 	<	< < @	; 	;; ;	/ 	/;< < @	; 	;; ;" D? ?	? 	?9 9sb  AU-	)S 2AS9S SS A2U-)S=.AS0S-S0S= A1U-T+$T
T$T%T)<U-%T7?1T*0T'1T*T76U-U!)UAUU
U1U9BU!	U-S		S  S*%U--S00S:	5S==TU-
T		TT$U-'T**T4	/T77U<U-UUUU	U!!U*&U-r.   )
__future__r   r   typingr   r   r   r1   trio.testingr    r   _signalsr	   r
   r   typesr   r   r!   r&   r)   r5   r;   rE   rQ   ri   r$   r%   r   <module>rp      sS    "  *   $  V V30	3397">>9r%   