
    #)f	                        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 ddl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)signal_raise)	FrameTypec                   K   t        j                  t         j                        } t        t         j                        5 }t	        t         j                         t	        t         j                         t        j                          d {    t	        t         j                         t        j                          d {    |2 3 d {   }|t         j                  k(  sJ  t        |      dk(  sJ t	        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  7 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   r   r   wait_all_tasks_blockedr
   pytestraisesRuntimeError	__anext__)origreceiversignums      U/var/www/html/flask-app/venv/lib/python3.12/site-packages/trio/_tests/test_signals.pytest_open_signal_receiverr      sk    FMM*D	fmm	, 7 	V]]#V]]#**,,,V]]#**,,,$ 	 	&V]]**'1Q66V]]#$ 	 	&V]]**'1Q666!7" 
|	$ #  """#FMM*d222 	-,	H
	H7 7$ 	## #s   =GA
F6	F)
4F6>F,?F6F0	F.
F0AF6F4F2F4'F6?!G G4G5G90G)F6,F6.F00F62F44F66F?;GGG	G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	N
  "&--9 		 FMM*d222	 	 s5   ?B.B"BB"&0B.B	B""B+'B.c                    K   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w)NzNo signals were providedr   )r   r   	TypeErrorr        r   $test_open_signal_receiver_empty_failr&   6   sL     	y(B	C !# 		 	 	 s/   AA<A	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                   K   t        t        j                  t        j                        5 } 	 t	        t        j
                  t        j                               d }t        d      D ]  }t        t        j                         t        t        j                         t                d {    || j                          d {   }b| 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   ^   s@     
fmmV]]	; "x	"&""6==12H2Y 
#V]]+V]]+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E8A;E(E)EEEEAE0E1E	FEEEEE52E84E55E88F=Fc                 >
  K   t               dfd} t        d       t        t        j                  t        j
                  h|       5  t        t        j                  t        j
                        5 }t        t        j                         t        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        t        j                         t        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        t        j                         d d d        t                d {    d d d        t        d       t        t        j                  ht        j                        5  t        t        j                        5 }t        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        t        j                         t        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 U# 1 sw Y   Ux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V]]+V]]+ACCC/9Q>>>	?	? mm88A;-#//<88COO((+,6==&--88889 9S	( 	( 	<	< < @	; 	;; ;	( 	(;< < @	; 	;; ;" D? ?	? 	?9 9sa  AT	)R23R %R:R;R?A2T1)R-A R RR 0R-8A1T)S
R:S
2S3S
7<T3S''S4S5S
S'6TT")TA S7S4
S7!T)BT7	T R
		RRTR  R*	%R--R72T:S	?	S

STSS$	S''S1,T4S77T<TT		TTTr.   )
__future__r   r   typingr   r   r   r1   trio.testingr    r   _signalsr	   r
   r   _utilr   typesr   r   r!   r&   r)   r5   r;   rE   rQ   ri   r$   r%   r   <module>rq      sV    "  *   $  V V  303397">>9r%   