B � f��@s�ddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d �Zej���d �Zd d �Zeed�o�eejej� Zdd�ZGdd�de�ZdS)�N�)� reduction�get_spawning_popen�set_spawning_popen)�spawn)�util�PopeniZwin32�frozenFzpythonservice.execCs ||kptj�|�tj�|�kS)N)�os�path�normcase)Zp1Zp2�r �F/opt/alt/python37/lib64/python3.7/multiprocessing/popen_spawn_win32.py�_path_eqsr�_base_executablecGsx|D]}t�|�qWdS)N)�_winapi� CloseHandle)Zhandles�handler r r�_close_handless rc@sJeZdZdZdZdd�Zdd�Zddd �Zd d �Zd d �Z e Z dd�Z dS)rz@ Start a subprocess to run the code of a process object rc CsPt�|j�}t�dd�\}}t�|d�}tjt� �|d�}d� dd�|D��}t� �}t r�t |tj�r�tj}tj��}tj|d<nd}t|ddd ���} y0t�||ddd d|dd� \} } } } t�| �Wnt�|��YnX| |_d|_| |_t| �|_t�|tj|jf�|_t|�zt� || �t� || �Wdtd�XWdQRXdS) Nr)Z parent_pidZ pipe_handle� css|]}d|VqdS)z"%s"Nr )�.0�xr r r� <genexpr>6sz!Popen.__init__.<locals>.<genexpr>�__PYVENV_LAUNCHER__�wbT)�closefdF)!rZget_preparation_data�_namerZ CreatePipe�msvcrtZopen_osfhandleZget_command_liner �getpid�joinZget_executable�WINENVr�sys� executabler�environ�copy�openZ CreateProcessr�pid� returncode�_handle�int�sentinelrZFinalize� finalizerrr�dump)�selfZ process_objZ prep_dataZrhandleZwhandleZwfd�cmdZ python_exe�envZto_childZhpZhtr&�tidr r r�__init__-s>        zPopen.__init__cCs|t�kst�t�||j�S)N)r�AssertionErrorrZ duplicater*)r-rr r r�duplicate_for_child]szPopen.duplicate_for_childNcCst|jdkrn|dkrtj}ntdt|dd��}t�t|j�|�}|tjkrnt�|j�}|t krht j }||_|jS)Nri�g�?) r'rZINFINITE�maxr)ZWaitForSingleObjectr(Z WAIT_OBJECT_0ZGetExitCodeProcess� TERMINATE�signal�SIGTERM)r-�timeoutZmsecsZres�coder r r�waitas   z Popen.waitcCs |jdd�S)Nr)r8)r:)r-r r r�pollqsz Popen.pollcCsL|jdkrHyt�t|j�t�Wn&tk rF|jdd�dkrB�YnXdS)Ng�?)r8)r'rZTerminateProcessr)r(r5�OSErrorr:)r-r r r� terminatets  zPopen.terminatecCs |��dS)N)r+)r-r r r�close~sz Popen.close)N) �__name__� __module__� __qualname__�__doc__�methodr1r3r:r;r=�killr>r r r rr's0 )r rr6r!r�contextrrr�rr�__all__r5�platform�getattrZWINEXEr"�lower�endswithZ WINSERVICEr�hasattrrr r�objectrr r r r�<module>s