U
    ‰d(
  ã                   @   sJ   d dl mZ d dlZd dlZd dlZddlmZ dgZG dd„ deƒZ	dS )é    )Úabsolute_importNé   )Ú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   ú7/tmp/pip-unpacked-wheel-lulkwrw3/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 kr zt | j|¡\}}W qb tk
r\ } z|jtjkrFW Y ¢q
W Y ¢d S d }~X Y q
X qbq
|| jkr t |¡r†t |¡ | _ nt 	|¡s”t
‚t |¡| _ | j S r   )r   ÚosÚwaitpidÚpidÚOSErrorÚerrnoZEINTRÚWIFSIGNALEDÚWTERMSIGÚ	WIFEXITEDÚAssertionErrorÚWEXITSTATUS)r   Úflagr   ÚstsÚer   r   r   Úpoll   s    


z
Popen.pollc                 C   sN   | j d krH|d k	r0ddlm} || jg|ƒs0d S |  |dkrBtjnd¡S | j S )Nr   )Úwaitg        r   )r   Ú
connectionr#   Úsentinelr"   r   ÚWNOHANG)r   Útimeoutr#   r   r   r   r#   2   s    
z
Popen.waitc              
   C   sh   | j d krdzt | jt¡ W nF tk
rb } z(t|dd ƒtjkrR| j	ddd krR‚ W 5 d }~X Y nX d S )Nr   gš™™™™™¹?)r'   )
r   r   Úkillr   r   r   Úgetattrr   ZESRCHr#   )r   Úexcr   r   r   Ú	terminate<   s    
zPopen.terminatec              	   C   sx   d}t  ¡ \}}t  ¡ | _| jdkrdz0t  |¡ dtjkrJdd l}| 	¡  | 
¡ }W 5 t  |¡ X nt  |¡ || _d S )Nr   r   Úrandom)r   Úpiper   r   Ú_exitÚcloser   Úmodulesr,   ÚseedÚ
_bootstrapr%   )r   r   ÚcodeZparent_rZchild_wr,   r   r   r   r   E   s    




zPopen._launchc                 C   s(   | j d k	r$zt | j ¡ W 5 d | _ X d S r   )r%   r   r/   )r   r   r   r   r/   V   s    
zPopen.close)N)Ú__name__Ú
__module__Ú__qualname__Úmethodr%   r   r   r   r&   r"   r#   r+   r   r/   r   r   r   r   r      s   

	)
Ú
__future__r   r   r   r   Úcommonr   Ú__all__Úobjectr   r   r   r   r   Ú<module>   s   