o
    HXh                     @   s   	 d dl Zd dlZ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 eed G dd de	Zdd Zed	krEe  dS dS )
    N)ForkWait)supportforkc                   @   s   e Zd Zdd Zdd ZdS )ForkTestc                    s   	 t  ddd  fdd}t j|d}|    d}t }z@|sHt}| kr9t| nt	j
dkrBtd	 td n|  | j||d
 W z
t|tj W d S  tyh   Y d S w z	t|tj W w  ty{   Y w w )Nzfake test modulepartialZcompletec                      s:   t   tj<   td  tj< t   d S )Ng{Gz?)impacquire_locksysmodulessettimesleeprelease_lock Zcomplete_moduleZfake_module_nameZimport_startedZpartial_moduler   9/opt/python-3.10.19/usr/lib/python3.10/test/test_fork1.pyimporter   s   


z9ForkTest.test_threaded_import_lock_fork.<locals>.importer)target*      z Child encountered partial moduleexitcode)	threadingEventThreadstartwaitosr   
__import___exitr   verboseprintjoin	wait_implkillsignalSIGKILLOSError)selfr   tr   pidmr   r   r   test_threaded_import_lock_fork   s@   
z'ForkTest.test_threaded_import_lock_forkc                    s.   	 d  fdd}t dD ]}|| qd S )Nr   c              	      s   d}d}z2z#t | D ]
}t  |d7 }q
t }| }W t |D ]}t  q!nt |D ]}t  q-w W n tyN   |rMtjdkrHt	d t
d  w |rVt
  j| d d S )Nr   Fr   zRuntimeError in childr   )ranger   r   r   r   r   RuntimeErrorr   r    r!   r   r#   )levelreleaseZin_childir*   r   r(   r   r   fork_with_import_lockC   s0   





zDForkTest.test_nested_import_lock_fork.<locals>.fork_with_import_lock   )r-   )r(   r3   r/   r   r2   r   test_nested_import_lock_fork?   s   
z%ForkTest.test_nested_import_lock_forkN)__name__
__module____qualname__r,   r5   r   r   r   r   r      s    +r   c                   C   s   t   d S )N)r   reap_childrenr   r   r   r   tearDownModule`   s   r:   __main__)_impr   r   r%   r	   r   r   ZunittestZtest.fork_waitr   testr   Zget_attributer   r:   r6   mainr   r   r   r   <module>   s     M