a  ze @sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|fdd}t|j|_dS)Ncs|}||dSN)share send_bytes)connpidr Znew_sockS/opt/bitninja-python-dojo/embedded/lib/python3.9/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfsockrrrr__init__s zDupSocket.__init__cCsBt|j"}|}t|WdS1s40YdS)z1Get the socket. This should only be called once.N)rget_connectionr recv_bytessocketZ fromshare)rr r rrrdetach$szDupSocket.detachN__name__ __module__ __qualname____doc__rrrrrrrsDupFdc@s eZdZdZddZddZdS)r#z-Wrapper for fd which can be used at any time.cs4t|fdd}fdd}t|||_dS)Ncst||dSr )r send_handle)r r Znew_fdrrr1szDupFd.__init__..sendcstdSr )osrrr%rrr3szDupFd.__init__..close)r&rrrr)rfdrrrr%rr/s   zDupFd.__init__cCs:t|j}t|WdS1s,0YdS)z-Get the fd. This should only be called once.N)rrrr recv_handle)rr rrrr7sz DupFd.detachNrrrrrr#-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ dS)_ResourceSharerz.Manager for resources using background thread.cCs:d|_i|_t|_d|_d|_d|_t |t j dS)Nr) _key_cache threadingLock_lock _listener_address_threadrregister_after_forkr) _afterfork)rrrrr?s z_ResourceSharer.__init__cCsf|jL|jdur||jd7_||f|j|j<|j|jfWdS1sX0YdS)z+Register resource, returning an identifier.Nr)r.r0_startr*r+)rrrrrrrHs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)zrrrrrrZs$       z_ResourceSharer.stopcCs\|jD]\}\}}|q |j|j|jdurF|jd|_d|_d|_dSr ) r+rCrDr._at_fork_reinitr/rr0r1)rr>rrrrrr3os    z_ResourceSharer._afterforkcCsXddlm}td|tjd|_|jj|_ t j |j d}d|_ |||_dS)Nr)Listenerz0starting listener and thread for sending handlesr7)targetT)r9rGrdebugrr:r8r/r=r0r,Thread_servedaemonstartr1)rrGtrrrr4zs   z_ResourceSharer._startcCsttdrttjtz|jf}|}|durJWdWq|\}}|j |\}}z|||W|n|0Wdn1s0YWqt st j t Yq0qdS)Npthread_sigmask)hasattrsignalrO SIG_BLOCK valid_signalsr/acceptrecvr+popr is_exitingsys excepthookexc_info)rr msgr>destination_pidrrrrrrKs   2z_ResourceSharer._serve)N) rr r!r"rr staticmethodrrr3r4rKrrrrr)=s      r))r&rQrrXr,rcontextrr__all__platformobjectrr#r)rrrrrr s       \