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@seZdZdd„Zdd„ZdS)rcs(| ¡‰‡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ƒS1s40YdSr)rÚget_connectionrZ recv_bytesÚsocketZ fromshare)rr r r r rÚdetach$szDupSocket.detachN©Ú__name__Ú __module__Ú __qualname__rrr r r rrsÚDupFdc@seZdZdd„Zdd„ZdS)rcs4t |¡‰‡fdd„}‡fdd„}t ||¡|_dS)Ncst |ˆ|¡dSr)rZ send_handle)r r ©Znew_fdr rr1szDupFd.__init__..sendcst ˆ¡dSr)Úosrr rr rr3szDupFd.__init__..close)r rrrr)rÚfdrrr rrr/s   zDupFd.__init__cCs:t |j¡}t |¡WdƒS1s,0YdSr)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sJeZdZdd„Zdd„Zedd„ƒZddd „Zd d „Zd d „Z dd„Z dS)Ú_ResourceSharercCs: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|jL|jdur| ¡|jd7_||f|j|j<|j|jfWdƒS1sX0YdS)Nr)r&r(Ú_startr#r$)rrrr r rrHs  z_ResourceSharer.registercCs<ddlm}|\}}||t ¡jd}| |t ¡f¡|S)Nr©ÚClient©Úauthkey)Ú connectionr-rÚcurrent_processr/rr Úgetpid)Zidentr-ÚaddressÚkeyÚcr r rrQs  z_ResourceSharer.get_connectionNcCsÊddlm}|j¤|jdur¨||jt ¡jd}| d¡| ¡|j   |¡|j   ¡rdt   d¡|j ¡d|_ d|_d|_|j ¡D]\}\}}|ƒqŠ|j ¡Wdƒn1s¼0YdS)Nrr,r.z._ResourceSharer thread did not stop when asked)r0r-r&r(rr1r/rrr)ÚjoinZis_aliverZ sub_warningr'r$ÚitemsÚclear)rZtimeoutr-r5r4rrr r rrZs$  ÿ     z_ResourceSharer.stopcCs\|j ¡D]\}\}}|ƒq |j ¡|j ¡|jdurF|j ¡d|_d|_d|_dSr) r$r7r8r&Ú_at_fork_reinitr'rr(r))rr4rrr r rr*os    z_ResourceSharer._afterforkcCsXddlm}t d¡|t ¡jd|_|jj|_ t j |j d}d|_ | ¡||_dS)Nr)ÚListenerz0starting listener and thread for sending handlesr.)ÚtargetT)r0r:rÚdebugrr1r/r'r3r(r%ZThreadÚ_serveZdaemonÚstartr))rr:Útr r rr+zs   z_ResourceSharer._startcCsÊttdƒrt tjt ¡¡z„|j ¡f}| ¡}|durJWdƒWqÆ|\}}|j  |¡\}}z|||ƒW|ƒn|ƒ0Wdƒn1s”0YWqt   ¡s¾t j t  ¡ŽYq0qdS)NÚpthread_sigmask)ÚhasattrÚsignalr@Ú SIG_BLOCKÚ valid_signalsr'ZacceptZrecvr$ÚpoprZ is_exitingÚsysÚ excepthookÚexc_info)rr Úmsgr4Zdestination_pidrrr r rr=…s   2z_ResourceSharer._serve)N) rrrrrÚ staticmethodrrr*r+r=r r r rr"=s      r")r rBrrFr%ÚrÚcontextrrÚ__all__ÚplatformÚobjectrrr"rrr r r rÚ s       \