o
    ¡D®fø	  ã                   @   s<   d dl Z d dlZd dlZddlmZ dgZG dd„ dƒZdS )é    Né   )ÚTERM_SIGNALÚPopenc                   @   sT   e Zd ZdZdZdd„ Zdd„ Zejfdd„Z	dd	d
„Z
dd„ Zdd„ Zdd„ ZdS )r   ÚforkNc                 C   s(   t j ¡  t j ¡  d | _|  |¡ d S ©N)ÚsysÚstdoutÚflushÚstderrÚ
returncodeÚ_launch)ÚselfÚprocess_obj© r   úL/home/ubuntu/webapp/venv/lib/python3.10/site-packages/billiard/popen_fork.pyÚ__init__   s   

zPopen.__init__c                 C   s   |S r   r   )r   Úfdr   r   r   Úduplicate_for_child   s   zPopen.duplicate_for_childc              
   C   s¬   | j d u rS	 zt | j|¡\}}W n ty0 } z|jtjkr%W Y d }~qW Y d }~d S d }~ww 	 || jkrSt |¡rFt |¡ | _ | j S t 	|¡sMJ ‚t 
|¡| _ | j S r   )r   ÚosÚwaitpidÚpidÚOSErrorÚerrnoÚEINTRÚWIFSIGNALEDÚWTERMSIGÚ	WIFEXITEDÚWEXITSTATUS)r   Úflagr   ÚstsÚer   r   r   Úpoll   s$   
€û

þz
Popen.pollc                 C   sP   | j d u r%|d urddlm} || jg|ƒsd S |  |dkr"tj¡S d¡S | j S )Nr   )Úwaitg        r   )r   Ú
connectionr"   Úsentinelr!   r   ÚWNOHANG)r   Útimeoutr"   r   r   r   r"   0   s   
z
Popen.waitc              
   C   s|   | j d u r<z
t | jt¡ W d S  ty; } z t|dd ƒtjkr)| j	ddd u r0‚ W Y d }~d S W Y d }~d S d }~ww d S )Nr   gš™™™™™¹?)r&   )
r   r   Úkillr   r   r   Úgetattrr   ÚESRCHr"   )r   Úexcr   r   r   Ú	terminate:   s   
þ€þýzPopen.terminatec              	   C   s‚   d}t  ¡ \}}t  ¡ | _| jdkr7zt  |¡ dtjv r%dd l}| ¡  | 	¡ }W t  
|¡ d S t  
|¡ w t  |¡ || _d S )Nr   r   Úrandom)r   Úpiper   r   Úcloser   Úmodulesr,   ÚseedÚ
_bootstrapÚ_exitr$   )r   r   ÚcodeÚparent_rÚchild_wr,   r   r   r   r   C   s   






zPopen._launchc                 C   s0   | j d urzt | j ¡ W d | _ d S d | _ w d S r   )r$   r   r.   )r   r   r   r   r.   T   s
   
üzPopen.closer   )Ú__name__Ú
__module__Ú__qualname__Úmethodr$   r   r   r   r%   r!   r"   r+   r   r.   r   r   r   r   r      s    

	)r   r   r   Úcommonr   Ú__all__r   r   r   r   r   Ú<module>   s    