a
    xd@                     @   s   d dl 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	 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 )    N   )_core)signal_raise)open_signal_receiver_signal_handlerc                     s:  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spJ  qxqV6 | dksJ tt j |2 z3 d H W }|t jksJ  qq6 | 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 s6J d S )Nr   )signal	getsignalSIGILLr   r   r   Zwait_all_tasks_blocked_pending_signal_countpytestraisesRuntimeError	__anext__)origreceiversignum r   O/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/tests/test_signals.pytest_open_signal_receiver   s&    



..r   c               	      sz   t t j} tt< tt jd W d    n1 s:0    Y  W d    n1 sX0    Y  t t j| u svJ d S )Ni )r   r   r	   r   r   
ValueErrorr   r   r   r   r   >test_open_signal_receiver_restore_handler_after_one_bad_signal#   s
    <r   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 provided)match)r   r   	TypeErrorr   r   r   r   r   $test_open_signal_receiver_empty_fail,   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_signal2   s    r   c                     sL   dd } t t& tjtj| I d H  W d    n1 s>0    Y  d S )Nc                      s.   t tj W d    n1 s 0    Y  d S r   )r   r   SIGINTr   r   r   r   naughty;   s    z0test_catch_signals_wrong_thread.<locals>.naughty)r   r   r   trioZ	to_threadZrun_syncrun)r   r   r   r   test_catch_signals_wrong_thread:   s    r!   c                     s   t tj ttjd} t 4 I d H .}|| j	 || j	 W d   I d H  qn1 I d H sd0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S r   )
r   r   r   ZBusyResourceErrorr   r   r	   Zopen_nurseryZ
start_soonr   )r   Znurseryr   r   r   "test_open_signal_receiver_conflictC   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_barrierM   s    r'   c                     s   t tjtj} ztttj d }tdD ]n}ttj ttj t I d H  |d u rj| 	 I d H }q.| 	 I d H }|tjtjfv sJ ||ksJ |}q.| 
 dkr| 	 I d H  qW n   dd l}|  Y n0 W d    n1 s0    Y  d S )N
   r   )r   r   r	   SIGFPEprintr   ranger   r'   r   r
   	traceback	print_exc)r   previous_gotr,   r   r   r   'test_open_signal_receiver_no_starvationT   s&    

r1   c               
      s  t    fdd} td ttjtjh| ^ ttjtj$}ttj ttj W d    n1 sf0    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| r ttjtjB}ttj ttj t I d H  |
 dksJ W d    n1 s*0    Y  W d    n1 sJ0    Y   tjtjhksjJ  	  td ttjhtjR 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d ttj8}ttj t I d H  |
 dks<J W d    n1 sR0    Y  W d    n1 sr0    Y  dd }ttjtjh| ttr}ttjtjB}ttj ttj t I d H  |
 dksJ W d    n1 s0    Y  W d    n1 s0    Y  |j}|jd	 h}t|jtsJJ ||jjd	  |tjtjhksrJ W d    n1 s0    Y  d S )
Nc                    s     |  d S r   )add)ZsignoframeZdelivered_directlyr   r   direct_handlerv   s    zAtest_catch_signals_race_condition_on_exit.<locals>.direct_handler   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$   r*   r   r   r	   r)   r   r   r'   clearr
   SIG_IGNr   r   r   valueargs
isinstance__context__r2   )r5   r   r9   excinfoexcZsignumsr   r4   r   )test_catch_signals_race_condition_on_exits   sV    
(*

R*,
R

RrB   )r   r   r    r   Z_utilr   Z_signalsr   r   r   r   r   r   r!   r"   r'   r1   rB   r   r   r   r   <module>   s   		
