a
    ze                     @   sV   d dl Z d dlZd dlZd dlZd dlZd dlmZ dZdZdZ	G dd dej
ZdS )    N)support   g      ?   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )ForkWaitc                 C   s    t  | _i | _d| _g | _d S )Nr   )r   Zthreading_setup_threading_keyalivestopthreads)self r   $/usr/lib/python3.9/test/fork_wait.pysetUp   s    
zForkWait.setUpc                 C   s8   d| _ | jD ]}|  qd }| j  tj| j  d S )N   )r   r	   joinclearr   Zthreading_cleanupr   )r
   threadr   r   r   tearDown   s    


zForkWait.tearDownc                 C   s<   | j s8t | j|< ztt W q  ty4   Y q 0 q d S )N)r   osgetpidr   timesleep
SHORTSLEEPOSError)r
   idr   r   r   f&   s    z
ForkWait.fc                C   s   t j||d d S )Nexitcode)r   Zwait_process)r
   cpidr   r   r   r   	wait_impl.   s    zForkWait.wait_implc           	      C   s  t tD ]*}tj| j|fd}|  | j| qt	 t
j }t| jtk rjtd |t	 k rBqjqBt| j }| |tt t | j }tjdv rt }nt }|dkrtt d}| jD ]}| j| || kr|d7 }qt| n| j|dd d S )N)targetargsg?)Z	unixware7r   r   r   )rangeNUM_THREADS	threadingThreadr   startr	   appendr   	monotonicr   ZSHORT_TIMEOUTlenr   r   sortedkeysZassertEquallistcopysysplatformr   Zfork1fork	LONGSLEEP_exitr   )	r
   ir   deadlineaZprefork_livesr   nkeyr   r   r   	test_wait1   s.    






zForkWait.test_waitN)__name__
__module____qualname__r   r   r   r   r7   r   r   r   r   r      s
   	r   )r   r-   r   Zunittestr#   testr   r0   r   r"   ZTestCaser   r   r   r   r   <module>   s    