
    Eg                        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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dS )    )annotationsN)TYPE_CHECKINGNoReturn   )_core)_signal_handlerget_pending_signal_countopen_signal_receiver)signal_raise)	FrameTypereturnNonec                 |  K   t          j        t           j                  } t          t           j                  5 }t	          t           j                   t	          t           j                   t          j                     d {V  t	          t           j                   t          j                     d {V  |2 3 d {V }|t           j        k    sJ  n6 t          |          dk    sJ t	          t           j                   |2 3 d {V }|t           j        k    sJ  n6 t          |          dk    sJ 	 d d d            n# 1 swxY w Y   t          j	        t                    5  |                                 d {V  d d d            n# 1 swxY w Y   t          j        t           j                  | u sJ d S )Nr   )signal	getsignalSIGILLr
   r   r   wait_all_tasks_blockedr	   pytestraisesRuntimeError	__anext__)origreceiversignums      M/var/www/sysmax/venv/lib/python3.11/site-packages/trio/_tests/test_signals.pytest_open_signal_receiverr      sp     FM**D	fm	,	, 7 	V]###V]###*,,,,,,,,,V]###*,,,,,,,,,$ 	 	 	 	 	 	 	&V]****E % (11Q6666V]###$ 	 	 	 	 	 	 	&V]****E % (11Q66666!7 7 7 7 7 7 7 7 7 7 7 7 7 7 7" 
|	$	$ # #  """""""""# # # # # # # # # # # # # # #FM**d222222s=   B E:C AED!+EEE(FFFc                 V  K   t          j        t           j                  } t          j        t
          d          5  t          t           j        d          5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t           j                  | u sJ d S )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     FM**D	N
 
 
   "&-99 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	               FM**d222222s5   A<A%A<%A)	)A<,A)	-A<<B B c                    K   t          j        t          d          5  t                      5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NzNo signals were providedr   )r   r   	TypeErrorr
        r   $test_open_signal_receiver_empty_failr'   5   s      	y(B	C	C	C  !## 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s.   A;A?	A?	AAAc                   K   t          j        t           j                  } t          t           j        t           j                  5  	 d d d            n# 1 swxY w Y   t          j        t           j                  | u sJ d S N)r   r   r   r
   r!   s    r   @test_open_signal_receiver_restore_handler_after_duplicate_signalr*   ;   s      FM**D	fmV]	;	;                 FM**d222222s   AAAc                    K   dd} t          j        t                    5  t          j                            t          j        |            d {V  d d d            d S # 1 swxY w Y   d S )Nr   r   c                 p   K   t          t          j                  5  	 d d d            d S # 1 swxY w Y   d S r)   )r
   r   SIGINTr%   r&   r   naughtyz0test_catch_signals_wrong_thread.<locals>.naughtyD   s}      !&-00 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   +//r   r   )r   r   r   trio	to_threadrun_syncrun)r.   s    r   test_catch_signals_wrong_threadr4   C   s          
|	$	$ 9 9n%%dh8888888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   1AA"%A"c                   K   t          j        t          j                  5  t	          t
          j                  5 } t          j                    4 d {V }|                    | j	                   |                    | j	                   d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r)   )
r   r   r0   BusyResourceErrorr
   r   r   open_nursery
start_soonr   )r   nurserys     r   "test_open_signal_receiver_conflictr:   L   s     	t-	.	. 7 7!&-00 	7H(** 7 7 7 7 7 7 7g""8#5666""8#56667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	77 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sX   CB95B
B9
B&&B9)B&*B9-C9B=	=C B=	CCCc                    K   t          j                    } t          j                    }|                    | j        d           |                                  d {V  d S )NT)
idempotent)r0   Eventr   current_trio_tokenrun_sync_soonsetwait)evtokens     r   +wait_run_sync_soon_idempotent_queue_barrierrD   V   sW      	B$&&E	4000
''))OOOOOOOOOr&   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 {V  || 	                                 d {V }e| 	                                 d {V }|t          j        t          j        fv sJ ||k    sJ |}t          |           dk    r-| 	                                 d {V  t          |           dk    -n(# t          $ r dd l}|                                 Y nw xY wd d d            d S # 1 swxY w Y   d S )N
   r   )r
   r   r   SIGFPEprintr   ranger   rD   r   r	   BaseException	traceback	print_exc)r   previous_gotrK   s        r   'test_open_signal_receiver_no_starvationrP   ]   s      
fmV]	;	; "x	"&"6=11222H2YY 
# 
#V]+++V]+++ACCCCCCCCC#%-%7%7%9%9999999HH ( 2 2 4 4444444C6=&-"@@@@@(????"HH*84499((********* +84499 	" 	" 	" !!!!!	"%" " " " " " " " " " " " " " " " " "s5   FD"EF"E1.F0E11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          t          j                   t          t          j                   d d d            n# 1 swxY w Y   t                       d {V  d d d            n# 1 swxY w Y   t          j        t          j        hk    sJ 	                                 t          d	           t          t          j        t          j        h|           5  t          t          j        t          j                  5 }t          t          j                   t          t          j                   t                       d {V  t          |          d	k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t          j        hk    sJ 	                                 t          d
           t          t          j        ht          j                  5  t          t          j                  5 }t          t          j                   d d d            n# 1 swxY w Y   t                       d {V  d d d            n# 1 swxY w Y   t          d           t          t          j        ht          j                  5  t          t          j                  5 }t          t          j                   t                       d {V  t          |          dk    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   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 {V  t          |          d	k    sJ 	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |j        }|j        d         h}t#          |j        t                    sJ |                    |j        j        d                    |t          j        t          j        hk    sJ 	 d d d            d S # 1 swxY w Y   d S )NsignointframeFrameType | Noner   r   c                2                         |            d S r)   )add)rR   rT   delivered_directlys     r   direct_handlerzAtest_catch_signals_race_condition_on_exit.<locals>.direct_handler   s    u%%%%%r&      r         r   r   c                     t          |           r)   )r   )r   rT   s     r   raise_handlerz@test_catch_signals_race_condition_on_exit.<locals>.raise_handler   s    6"""r&   r   )rR   rS   rT   rU   r   r   )r   rS   rT   rU   r   r   )r@   rH   r   r   r   rG   r
   r   rD   clearr	   SIG_IGNr   r   r   valueargs
isinstance__context__rW   )rY   r   r^   excinfoexcsignumsrX   s         @r   )test_catch_signals_race_condition_on_exitrh   |   s1     #&55& & & & & & 
!HHH 
&-7	H	H < <!&-?? 	(8''''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( :;;;;;;;;;	< < < < < < < < < < < < < < <
 &-!?????	!HHH 
&-7	H	H ; ;!&-?? 	;8''''''=?????????+H55:::::		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; &-!????? 
!HHH	&-&.	9	9 < <!&-00 	(H'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(9;;;;;;;;;< < < < < < < < < < < < < < < 
!HHH	&-&.	9	9 ; ;!&-00 	;H'''=?????????+H55:::::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;# # # # 
&-7	G	G 9 9]<(( 	?G%fmV]CC ?xV]+++V]+++ACCCCCCCCC/99Q>>>>>	? ? ? ? ? ? ? ? ? ? ? ? ? ? ?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? m8A;-#/<88888CO(+,,,6=&-8888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s6  %C23B1%C1B5	5C8B5	9CC #C %G33AGG3G 	 G3#G 	$G33G7:G7$K>J$K$J(	(K+J(	,KKKN(AM8,N8M<	<N?M<	 NNNT%RAQ, R,Q00R3Q04R7TR	T
R	A7TTTr/   )
__future__r   r   typingr   r   r   r0    r   _signalsr   r	   r
   _utilr   typesr   r   r"   r'   r*   r4   r:   rD   rP   rh   r%   r&   r   <module>ro      sd   " " " " " "  * * * * * * * *         V V V V V V V V V V              3 3 3 303 3 3 3   3 3 3 39 9 9 97 7 7 7   " " " ">>9 >9 >9 >9 >9 >9r&   