o
    svXj  ã                   @   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oAeeddƒZej ¡  d¡Zejd
krrzd dlmZmZ ejZW n eyq   d dlmZmZ dd„ ZY nw 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   úW/var/www/html/myproject/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 s“w   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__1   s:   

ÿþ


"ézPopen.__init__c                 C   s0   | j d urzt | j ¡ W d | _ d S d | _ w d S r   )r1   r   r,   ©r4   r   r   r   ÚcloseW   s
   
üzPopen.closec                 C   s   | t  ¡ u sJ ‚t || j¡S r   )r   Úget_spawning_popenr   Ú	duplicater1   )r4   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Úmaxr0   ÚWaitForSingleObjectr/   ÚWAIT_OBJECT_0r   Ú	TERMINATEÚsignalÚSIGTERM)r4   ÚtimeoutÚmsecsÚresÚcoder   r   r   Úwaitb   s   


z
Popen.waitc                 C   s   | j dd�S )Nr   ©rL   )rP   r@   r   r   r   Úpollr   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      ð?rQ   )r.   r   ÚTerminateProcessr0   r/   rI   ÚOSErrorrP   r@   r   r   r   Ú	terminateu   s   
ÿÿýzPopen.terminater   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úmethodr1   r?   rA   rD   rP   rR   rU   r   r   r   r   r   *   s    &
)Ú
__future__r   r)   r   r$   rJ   ÚsysÚ r   r   r   Úcompatr   Ú__all__rI   ÚplatformÚgetattrÚWINEXEÚ
executableÚlowerÚendswithÚ
WINSERVICEr   r   r,   r   ÚImportErrorÚ_subprocessÚobjectr   r   r   r   r   Ú<module>   s.    

ý