a
    xd                     @   s   d dl mZ 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 ddlm	Z	 ddlm
Z
 ddlmZ dgZd	Zejd
koeeddZej dZejd
krzd dlmZmZ ejZW n* ey   d dlmZmZ dd ZY n0 G dd deZdS )    )absolute_importN   )context)spawn)	reduction)_winapiPopeni   win32frozenFzpythonservice.exe)CreateProcessGetExitCodeProcessc                 C   s   |    d S N)Close)handle r   R/var/www/html/Ranjet/env/lib/python3.9/site-packages/billiard/popen_spawn_win32.pyclose_thread_handle&   s    r   c                   @   sJ   e Zd ZdZdZdZdd Zdd Zdd	 Zdd
dZ	dd Z
dd ZdS )r   z@
    Start a subprocess to run the code of a process object
    r   Nc                 C   s:  dt jd< t  t|j}td d\}}t	|d}tj
t  |d}ddd |D }tj|dd	d
}z0tt |d d ddd d d 	\}}	}
}t|	 W n   t|  Y n0 |
| _d | _|| _t|| _t|  z&t|| t|| W td  ntd  0 W d    n1 s,0    Y  d S )N1ZMULTIPROCESSING_FORKING_DISABLEr   )Z
parent_pidZpipe_handle c                 s   s   | ]}d | V  qdS )z"%s"Nr   ).0xr   r   r   	<genexpr><       z!Popen.__init__.<locals>.<genexpr>wbT)closefdF)osenvironr   Z_Django_old_layout_hack__saveZget_preparation_data_namer   Z
CreatePipemsvcrtopen_osfhandleZget_command_linegetpidjoinioopenr   get_executabler   CloseHandlepid
returncode_handleintsentinelr   Zset_spawning_popenr   dump)selfZprocess_objZ	prep_dataZrhandleZwhandleZwfdcmdZto_childhpZhtr&   tidr   r   r   __init__1   s8    




zPopen.__init__c                 C   s.   | j d ur*zt| j  W d | _ nd | _ 0 d S r   )r*   r   r%   r,   r   r   r   closeW   s    
zPopen.closec                 C   s   | t  u sJ t|| jS r   )r   Zget_spawning_popenr   Z	duplicater*   )r,   r   r   r   r   duplicate_for_child^   s    zPopen.duplicate_for_childc                 C   sr   | j d u rl|d u rtj}ntdt|d d }tt| j|}|tjkrlt| j}|t	krft
j }|| _ | j S )Nr   i  g      ?)r'   r   ZINFINITEmaxr)   ZWaitForSingleObjectr(   ZWAIT_OBJECT_0r   	TERMINATEsignalSIGTERM)r,   timeoutmsecsrescoder   r   r   waitb   s    


z
Popen.waitc                 C   s   | j ddS )Nr   r8   )r<   r1   r   r   r   pollr   s    z
Popen.pollc                 C   sJ   | j d u rFztt| jt W n$ tyD   | jddd u r@ Y n0 d S )Ng      ?r=   )r'   r   ZTerminateProcessr)   r(   r5   OSErrorr<   r1   r   r   r   	terminateu   s    
zPopen.terminate)N)__name__
__module____qualname____doc__methodr*   r0   r2   r3   r<   r>   r@   r   r   r   r   r   *   s   &
)
__future__r   r"   r   r   r6   sys r   r   r   compatr   __all__r5   platformgetattrZWINEXE
executablelowerendswithZ
WINSERVICEr   r   r%   r   ImportErrorZ_subprocessobjectr   r   r   r   r   <module>   s*   

