U
    d%                     @   s   d dl mZ d dlZd dlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 d	gZ
G d
d deZG dd	 d	ejZdS )    )absolute_importN   )	reduction)context)
forkserver)
popen_fork)spawnPopenc                   @   s   e Zd Zdd Zdd ZdS )_DupFdc                 C   s
   || _ d S N)ind)selfr    r   =/tmp/pip-unpacked-wheel-lulkwrw3/billiard/popen_forkserver.py__init__   s    z_DupFd.__init__c                 C   s   t  | j S r   )r   Zget_inherited_fdsr   )r   r   r   r   detach   s    z_DupFd.detachN)__name__
__module____qualname__r   r   r   r   r   r   r
      s   r
   c                       sB   e Zd ZdZeZ fddZdd Zdd Ze	j
fdd	Z  ZS )
r	   r   c                    s   g | _ tt| | d S r   )_fdssuperr	   r   )r   process_obj	__class__r   r   r   $   s    zPopen.__init__c                 C   s   | j | t| j d S )Nr   )r   appendlen)r   fdr   r   r   duplicate_for_child(   s    zPopen.duplicate_for_childc              	   C   s   t |j}t }t|  zt|| t|| W 5 td  X t	
| j\| _}tj|ddd}||  W 5 Q R X t	| j| _d S )NwbT)closefd)r   Zget_preparation_data_nameioBytesIOr   Zset_spawning_popenr   dumpr   Zconnect_to_new_processr   sentinelopenwrite	getbufferread_unsignedpid)r   r   Z	prep_databufwfr   r   r   _launch,   s    
zPopen._launchc              	   C   sr   | j d krlddlm} |tjkr$dnd }|| jg|s:d S zt| j| _ W n tt	fk
rj   d| _ Y nX | j S )Nr   )waitr      )

returncode
connectionr.   osWNOHANGr$   r   r(   OSErrorEOFError)r   flagr.   timeoutr   r   r   poll;   s    
z
Popen.poll)r   r   r   methodr
   ZDupFdr   r   r-   r2   r3   r8   __classcell__r   r   r   r   r	       s   )
__future__r   r!   r2    r   r   r   r   r   __all__objectr
   r	   r   r   r   r   <module>   s   