U
    !ºcú  ã                   @   st   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 G dd„ dƒZ	dd	„ Z
d
d„ Zeeeƒ eejeƒ dS )é    N)ÚPipeConnection)Ú_reduce_socketé   )Úregisterc                   @   s   e Zd Zddd„Zdd„ ZdS )Ú	DupHandleNc              	   C   s\   |d krt  ¡ }t tjd|¡}zt t ¡ |||dd¡| _W 5 t |¡ X || _	|| _
d S )NFr   )ÚosÚgetpidÚ_winapiÚOpenProcessÚPROCESS_DUP_HANDLEÚCloseHandleÚDuplicateHandleÚGetCurrentProcessÚ_handleÚ_accessÚ_pid)ÚselfÚhandleÚaccessÚpidÚproc© r   úP/tmp/pip-unpacked-wheel-ii96bjgz/joblib/externals/loky/backend/_win_reduction.pyÚ__init__   s        þ
zDupHandle.__init__c              	   C   sZ   | j t ¡ kr| jS t tjd| j ¡}z"t || jt 	¡ | j
dtj¡W ¢S t |¡ X d S )NF)r   r   r   r   r	   r
   r   r   r   r   r   ZDUPLICATE_CLOSE_SOURCE)r   r   r   r   r   Údetach!   s    
ÿ    þzDupHandle.detach)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   
r   c                 C   s   |   ¡ }t|||ƒS )N)r   r   )ÚdhÚreadableÚwritabler   r   r   r   Úrebuild_pipe_connection/   s    r!   c                 C   s@   | j rtjnd| jrtjndB }t|  ¡ |ƒ}t|| j | jffS )Nr   )r   r	   ZFILE_GENERIC_READr    ZFILE_GENERIC_WRITEr   Úfilenor!   )Úconnr   r   r   r   r   Úreduce_pipe_connection4   s
    ÿr$   )r   Úsocketr	   Zmultiprocessing.connectionr   Zmultiprocessing.reductionr   Z	reductionr   r   r!   r$   r   r   r   r   Ú<module>	   s   
