o
    GXh                     @   sd   	 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 dlmZ dZ	dZ
dZG dd dejZdS )	    N)support)threading_helper   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   8/opt/python-3.10.19/usr/lib/python3.10/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   sD   | j s t | j|< ztt W n	 ty   Y nw | j rd S 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 r;td |t	 k r4nt| jtk s(t| j }| |tt t | j }tjdv r[t }nt }|dkrtt d}| jD ]}| j| || kr||d7 }qmt| d S | 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_wait2   s2   





zForkWait.test_waitN)__name__
__module____qualname__r   r   r   r   r8   r   r   r   r   r      s    	r   )r   r.   r   Zunittestr$   testr   Ztest.supportr   r1   r   r#   ZTestCaser   r   r   r   r   <module>   s     