a XC?h��@s�ddlZddlZddlZddlZddlZddlmZmZmZddl m Z ddl m Z dgZ dZ ejdkoreed d �Zej���d �Zd d �Zeejej� 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/python39/lib64/python3.9/multiprocessing/popen_spawn_win32.py�_path_eqsrcGs|D]}t�|�qdSr )�_winapi� CloseHandle)Zhandles�handlerrr�_close_handlessrc@sFeZdZdZdd�Zdd�Zddd�Zd d �Zd d �ZeZ d d�Z dS)rrc Csrt�|j�}t�dd�\}}t�|d�}tjt� �|d�}d� dd�|D��}t� �}t r�t |tj�r�tj}tj��}tj|d<nd}t|ddd ���} z0t�||ddd d|dd� \} } } } t�| �Wnt�|��Yn0| |_d|_| |_t| �|_t�|t|jt|�f�|_t|�z$t �!|| �t �!|| �Wtd�n td�0Wd�n1�sd0YdS) Nr)Z parent_pidZ pipe_handle� css|]}d|VqdS)z"%s"Nr)�.0�xrrr� 9�z!Popen.__init__..�__PYVENV_LAUNCHER__�wbT)�closefdF)"rZget_preparation_data�_namerZ CreatePipe�msvcrtZopen_osfhandleZget_command_liner �getpid�joinZget_executable�WINENVr�sys� executable�_base_executable�environ�copy�openZ CreateProcessr�pid� returncode�_handle�int�sentinelrZFinalizer� finalizerrr�dump)�selfZ process_objZ prep_dataZrhandleZwhandleZwfd�cmdZ python_exe�envZto_childZhpZhtr(�tidrrr�__init__,sF   �  �    � zPopen.__init__cCst�||j�Sr )rZ duplicater,)r/rrrr�duplicate_for_childaszPopen.duplicate_for_childNcCst|jdurn|durtj}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/�timeoutZmsecs�res�coderrr�waites   z Popen.waitcCs |jdd�S)Nr�r9)r<�r/rrr�pollusz Popen.pollcCsJ|jdurFzt�t|j�t�Wn$tyD|jdd�dur@�Yn0dS)Ng�?r=)r)rZTerminateProcessr+r*r6�OSErrorr<r>rrr� terminatexs   zPopen.terminatecCs |��dSr )r-r>rrr�close�sz Popen.close)N) �__name__� __module__� __qualname__�methodr3r4r<r?rA�killrBrrrrr&s5 )r rr7r"r�contextrrr�rr�__all__r6�platform�getattrZWINEXEr#�lower�endswithZ WINSERVICErr$r!r�objectrrrrr�s