a XC?h �@s�ddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd d�de �Z ne d g7Z Gd d �d e �ZGd d �d e �Ze�ZejZdS)�N�)�process)� reduction)�util�stopZwin32� DupSocketc@s eZdZdZdd�Zdd�ZdS)rzPicklable wrapper for a socket.cs(|����fdd�}t�|�j�|_dS)Ncs��|�}|�|�dS�N)�shareZ send_bytes)�conn�pidr �Znew_sock��D/opt/alt/python39/lib64/python3.9/multiprocessing/resource_sharer.py�sends z DupSocket.__init__..send)�dup�_resource_sharer�register�close�_id)�selfZsockrr r r�__init__s zDupSocket.__init__cCsBt�|j��"}|��}t�|�Wd�S1s40YdS)z1Get the socket. This should only be called once.N)r�get_connectionrZ recv_bytes�socketZ fromshare)rr r r r r�detach$szDupSocket.detachN��__name__� __module__� __qualname__�__doc__rrr r r rrs�DupFdc@s eZdZdZdd�Zdd�ZdS)rz-Wrapper for fd which can be used at any time.cs4t�|���fdd�}�fdd�}t�||�|_dS)Ncst�|�|�dSr)rZ send_handle)r r �Znew_fdr rr1szDupFd.__init__..sendcst���dSr)�osrr r r rr3szDupFd.__init__..close)r!rrrr)r�fdrrr r rr/s   zDupFd.__init__cCs:t�|j��}t�|�Wd�S1s,0YdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sNeZdZdZdd�Zdd�Zedd��Zdd d �Zd d �Z d d�Z dd�Z dS)�_ResourceSharerz.Manager for resources using background thread.cCs:d|_i|_t��|_d|_d|_d|_t� |t j �dS)Nr) �_key�_cache� threadingZLock�_lock� _listener�_address�_threadrZregister_after_forkr#� _afterfork)rr r rr?s z_ResourceSharer.__init__cCsf|j�L|jdur|��|jd7_||f|j|j<|j|jfWd�S1sX0YdS)z+Register resource, returning an identifier.Nr)r'r)�_startr$r%)rrrr r rrHs  z_ResourceSharer.registercCs<ddlm}|\}}||t��jd�}|�|t��f�|S)z�s   2z_ResourceSharer._serve)N) rrrrrr� staticmethodrrr+r,r>r r r rr#=s      r#)r!rCrrGr&�r�contextrr�__all__�platform�objectrrr#rrr r r r� s       \