
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a«  ã                   @   s¸   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mZmZ ddl	m
Z
 ddl	mZ dgZdZejdkoreed	d
ƒZej ¡  d¡Zdd„ Zeejejƒ Zdd„ ZG dd„ deƒZdS )é    Né   )Ú	reductionÚget_spawning_popenÚset_spawning_popen)Úspawn)ÚutilÚPopeni   Zwin32ÚfrozenFzpythonservice.exec                 C   s    | |kpt j | ¡t j |¡kS ©N)ÚosÚpathÚnormcase)Zp1Zp2© r   úF/opt/alt/python38/lib64/python3.8/multiprocessing/popen_spawn_win32.pyÚ_path_eq   s    r   c                  G   s   | D ]}t  |¡ qd S r
   )Ú_winapiÚCloseHandle)ZhandlesÚhandler   r   r   Ú_close_handles   s    r   c                   @   sF   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ Zdd„ ZeZ	dd„ Z
dS )r   r   c                 C   sT  t  |j¡}t d d¡\}}t |d¡}t jt 	¡ |d�}d 
dd„ |D ƒ¡}t  ¡ }tr‚t|tjƒr‚tj}tj ¡ }tj|d< nd }t|ddd	��¶}	z0t ||d d d
d|d d ¡	\}
}}}t |¡ W n   t |¡ ‚ Y nX || _d | _|
| _t|
ƒ| _t | t| jt|ƒf¡| _t| ƒ zt  !||	¡ t  !||	¡ W 5 td ƒ X W 5 Q R X d S )Nr   )Z
parent_pidZpipe_handleú c                 s   s   | ]}d | V  qdS )z"%s"Nr   )Ú.0Úxr   r   r   Ú	<genexpr>9   s     z!Popen.__init__.<locals>.<genexpr>Ú__PYVENV_LAUNCHER__ÚwbT)ÚclosefdF)"r   Zget_preparation_dataÚ_namer   Z
CreatePipeÚmsvcrtZopen_osfhandleZget_command_liner   ÚgetpidÚjoinZget_executableÚWINENVr   ÚsysÚ
executableÚ_base_executableÚenvironÚcopyÚopenZCreateProcessr   ÚpidÚ
returncodeÚ_handleÚintÚsentinelr   ZFinalizer   Ú	finalizerr   r   Údump)ÚselfZprocess_objZ	prep_dataZrhandleZwhandleZwfdÚcmdZ
python_exeÚenvZto_childZhpZhtr'   Útidr   r   r   Ú__init__,   sT    
ÿ
       þ

ÿzPopen.__init__c                 C   s   t  || j¡S r
   )r   Z	duplicater+   )r.   r   r   r   r   Úduplicate_for_childa   s    zPopen.duplicate_for_childNc                 C   st   | j d krn|d krtj}ntdt|d d ƒƒ}t t| jƒ|¡}|tjkrnt | j¡}|t	krht
j }|| _ | j S )Nr   iè  g      à?)r(   r   ZINFINITEÚmaxr*   ZWaitForSingleObjectr)   ZWAIT_OBJECT_0ZGetExitCodeProcessÚ	TERMINATEÚsignalÚSIGTERM)r.   ÚtimeoutZmsecsÚresÚcoder   r   r   Úwaite   s    

z
Popen.waitc                 C   s   | j dd�S )Nr   ©r8   )r;   ©r.   r   r   r   Úpollu   s    z
Popen.pollc                 C   sL   | j d krHzt t| jƒt¡ W n& tk
rF   | jdd�d krB‚ Y nX d S )Ng      ð?r<   )r(   r   ZTerminateProcessr*   r)   r5   ÚOSErrorr;   r=   r   r   r   Ú	terminatex   s    
zPopen.terminatec                 C   s   |   ¡  d S r
   )r,   r=   r   r   r   Úclose‚   s    zPopen.close)N)Ú__name__Ú
__module__Ú__qualname__Úmethodr2   r3   r;   r>   r@   ÚkillrA   r   r   r   r   r   &   s   5
)r   r   r6   r!   r   Úcontextr   r   r   Ú r   r   Ú__all__r5   ÚplatformÚgetattrZWINEXEr"   ÚlowerÚendswithZ
WINSERVICEr   r#   r    r   Úobjectr   r   r   r   r   Ú<module>   s   
