o
    Df                     @   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 ddlmZ ddlmZ ddl	m
Z
 dgZdZejd	ko;eed
dZej dZejd	krlzd dl
mZmZ e
jZW n eyk   d dlmZmZ dd ZY nw G dd dZdS )    N   )context)spawn)	reduction)_winapiPopeni   win32frozenFzpythonservice.exe)CreateProcessGetExitCodeProcessc                 C   s   |    d S N)Close)handle r   S/home/ubuntu/webapp/venv/lib/python3.10/site-packages/billiard/popen_spawn_win32.pyclose_thread_handle$      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   s4  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
X}ztt |d d ddd d d 	\}}	}
}t|	 W n	   t|  |
| _d | _|| _t|| _t|  zt|| t|| W td  ntd  w W d    d S 1 sw   Y  d S )N1MULTIPROCESSING_FORKING_DISABLEr   )
parent_pidpipe_handle c                 s   s    | ]}d | V  qdS )z"%s"Nr   ).0xr   r   r   	<genexpr>:   s    z!Popen.__init__.<locals>.<genexpr>wbT)closefdF)osenvironr   _Django_old_layout_hack__saveget_preparation_data_namer   
CreatePipemsvcrtopen_osfhandleget_command_linegetpidjoinioopenr
   get_executabler   CloseHandlepid
returncode_handleintsentinelr   set_spawning_popenr   dump)selfprocess_obj	prep_datarhandlewhandlewfdcmdto_childhphtr,   tidr   r   r   __init__/   s:   




"zPopen.__init__c                 C   s0   | j d urzt| j  W d | _ d S d | _ w d S r   )r0   r   r+   r3   r   r   r   closeU   s
   
zPopen.closec                 C   s   | t  u sJ t|| jS r   )r   get_spawning_popenr   	duplicater0   )r3   r   r   r   r   duplicate_for_child\   s   zPopen.duplicate_for_childc                 C   sr   | j d u r6|d u rtj}ntdt|d d }tt| j|}|tjkr6t| j}|t	kr3t
j }|| _ | j S )Nr   i  g      ?)r-   r   INFINITEmaxr/   WaitForSingleObjectr.   WAIT_OBJECT_0r   	TERMINATEsignalSIGTERM)r3   timeoutmsecsrescoder   r   r   wait`   s   


z
Popen.waitc                 C   s   | j ddS )Nr   rK   )rO   r?   r   r   r   pollp   r   z
Popen.pollc                 C   sN   | j d u r%ztt| jt W d S  ty$   | jddd u r! Y d S w d S )Ng      ?rP   )r-   r   TerminateProcessr/   r.   rH   OSErrorrO   r?   r   r   r   	terminates   s   
zPopen.terminater   )__name__
__module____qualname____doc__methodr0   r>   r@   rC   rO   rQ   rT   r   r   r   r   r   (   s    &
)r(   r   r#   rI   sys r   r   r   compatr   __all__rH   platformgetattrWINEXE
executablelowerendswith
WINSERVICEr
   r   r+   r   ImportError_subprocessr   r   r   r   r   <module>   s,    

