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@seZdZddZddZdS)rcs(|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|WdS1s40YdSr )rget_connectionr recv_bytessocketZ fromshare)rr r rrrdetach$szDupSocket.detachN__name__ __module__ __qualname__rrrrrrrsDupFdc@seZdZddZddZdS)r"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,0YdSr )rrrr recv_handle)rr rrrr7sz DupFd.detachNrrrrrr"-sc@sJeZdZddZddZeddZddd Zd d Zd d Z ddZ dS)_ResourceSharercCs: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)Nr)r-r/_startr)r*)rrrrrrrHs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)NrClientauthkey) connectionr5rcurrent_processr7rr%getpid)identr5addresskeycrrrrQs  z_ResourceSharer.get_connectionNcCsddlm}|j|jdur||jtjd}|d||j ||j rdt d|jd|_ d|_d|_|jD]\}\}}|q|jWdn1s0YdS)Nrr4r6z._ResourceSharer thread did not stop when asked)r8r5r-r/rr9r7rrr0joinis_aliver sub_warningr.r*itemsclear)rtimeoutr5r>r=rrrrrrZs$       z_ResourceSharer.stopcCs\|jD]\}\}}|q |j|j|jdurF|jd|_d|_d|_dSr ) r*rBrCr-_at_fork_reinitr.rr/r0)rr=rrrrrr2os    z_ResourceSharer._afterforkcCsXddlm}td|tjd|_|jj|_ t j |j d}d|_ |||_dS)Nr)Listenerz0starting listener and thread for sending handlesr6)targetT)r8rFrdebugrr9r7r.r<r/r+Thread_servedaemonstartr0)rrFtrrrr3zs   z_ResourceSharer._startcCsttdrttjtz|jf}|}|durJWdWq|\}}|j |\}}z|||W|n|0Wdn1s0YWqt st j t Yq0qdS)Npthread_sigmask)hasattrsignalrN SIG_BLOCK valid_signalsr.acceptrecvr*popr is_exitingsys excepthookexc_info)rr msgr=destination_pidrrrrrrJs   2z_ResourceSharer._serve)N) rr r!rr staticmethodrrr2r3rJrrrrr(=s      r()r%rPrrWr+rcontextrr__all__platformobjectrr"r(rrrrrr s       \