a
    QIhN                     @  s   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rpd dlmZ d	d
ddZd	d
ddZd	d
ddZd	d
ddZd	d
ddZd	d
ddZd	d
ddZd	d
ddZd	d
ddZdS )    )annotationsN)TYPE_CHECKINGNoReturn)RaisesGroup   )_core)_signal_handlerget_pending_signal_countopen_signal_receiver)	FrameTypeNonereturnc                    sB  t t j} tt j}t t j t t j t I d H  t t j t I d H  |2 z3 d H W }|t jksvJ  q~q\6 t|dksJ t t j |2 z3 d H W }|t jksJ  qq6 t|dksJ W d    n1 s0    Y  t	t
 | I d H  W d    n1 s0    Y  t t j| u s>J d S )Nr   )signal	getsignalSIGILLr
   raise_signalr   Zwait_all_tasks_blockedr	   pytestraisesRuntimeError	__anext__)origreceiversignum r   R/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/trio/_tests/test_signals.pytest_open_signal_receiver   s&    ..r   c               	     s~   t t j} tjtdd< tt jd W d    n1 s>0    Y  W d    n1 s\0    Y  t t j| u szJ d S )Nz2(signal number out of range|invalid signal value)$matchi )r   r   r   r   r   
ValueErrorr
   r   r   r   r   >test_open_signal_receiver_restore_handler_after_one_bad_signal*   s    <r!   c                	   C  sX   t jtdd6 t  W d    n1 s,0    Y  W d    n1 sJ0    Y  d S )NzNo signals were providedr   )r   r   	TypeErrorr
   r   r   r   r   $test_open_signal_receiver_empty_fail6   s    r#   c                    sR   t t j} tt jt j W d    n1 s00    Y  t t j| u sNJ d S N)r   r   r   r
   r    r   r   r   @test_open_signal_receiver_restore_handler_after_duplicate_signal<   s    r%   c                    sR   dddd} t t& tjtj| I d H  W d    n1 sD0    Y  d S )Nr   r   c                     s.   t tj W d    n1 s 0    Y  d S r$   )r
   r   SIGINTr   r   r   r   naughtyE   s    z0test_catch_signals_wrong_thread.<locals>.naughty)r   r   r   trio	to_threadZrun_syncrun)r'   r   r   r   test_catch_signals_wrong_threadD   s    r+   c                    s   t tj ttjd} t 4 I d H .}|| j || j W d   I d H  ql1 I d H sb0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S r$   )	r   r(   ZBusyResourceErrorr
   r   r   Zopen_nurseryZ
start_soonr   )r   Znurseryr   r   r   "test_open_signal_receiver_conflictM   s
    r,   c                    s2   t  } t }|j| jdd |  I d H  d S )NT)Z
idempotent)r(   Eventr   Zcurrent_trio_tokenZrun_sync_soonsetwait)Zevtokenr   r   r   +wait_run_sync_soon_idempotent_queue_barrierW   s    r1   c               	     s  t tjtj} ztttj d }tdD ]r}ttj ttj t I d H  |d u rn| 	 I d H }q.| 	 I d H }|tjtjfv sJ ||ksJ |}q.t
| dkr| 	 I d H  qW n" ty   dd l}|  Y n0 W d    n1 s0    Y  d S )N
   r   )r
   r   r   SIGFPEprintr   ranger   r1   r   r	   BaseException	traceback	print_exc)r   previous_gotr7   r   r   r   'test_open_signal_receiver_no_starvation^   s&    r<   c               
     s  t   dddd fdd} td ttjtjh| b ttjtj(}ttj ttj W d    n1 st0    Y  t I d H  W d    n1 s0    Y   tjtjhksJ  	  td ttjtjh| v ttjtjF}ttj ttj t I d H  t
|dks&J W d    n1 s<0    Y  W d    n1 s\0    Y   tjtjhks|J  	  td	 ttjhtjT ttj}ttj W d    n1 s0    Y  t I d H  W d    n1 s0    Y  td
 ttjhtjf ttj:}ttj t I d H  t
|dksRJ W d    n1 sh0    Y  W d    n1 s0    Y  dddddd}ttjtjh| ttv}ttjtjF}ttj ttj t I d H  t
|dks
J W d    n1 s 0    Y  W d    n1 s@0    Y  |j}|jd h}t|jtsnJ ||jjd  |tjtjhksJ W d    n1 s0    Y  d S )NintzFrameType | Noner   )signoframer   c                   s     |  d S r$   )add)r>   r?   Zdelivered_directlyr   r   direct_handler   s    zAtest_catch_signals_race_condition_on_exit.<locals>.direct_handler   r         r   )r   r?   r   c                 S  s   t | d S r$   )r   )r   r?   r   r   r   raise_handler   s    z@test_catch_signals_race_condition_on_exit.<locals>.raise_handlerr   )r.   r4   r   r   r   r3   r
   r   r1   clearr	   SIG_IGNr   r   r   valueargs
isinstance__context__r@   )rB   r   rF   excinfoexcZsignumsr   rA   r   )test_catch_signals_race_condition_on_exit}   sV    **R,,RRrO   )
__future__r   r   typingr   r   r   r(   Ztrio.testingr    r   Z_signalsr   r	   r
   typesr   r   r!   r#   r%   r+   r,   r1   r<   rO   r   r   r   r   <module>   s$   	
