e f@sddlZddlZddlZddlZddlZddlZddlZddlmZdddddgZ ej d kpe ed oe ed oe ejd Z Gd ddej ZejZdddZej d krfe dddg7Z ddlZddddZddZddZddZGdddeZnje dddg7Z ddlZej dkZddZddZddZddZd dZd!d"ZGd#d$d$Zeeej ed%d&Z!eee"j#e!eee$j%e!d'd(Z&d)d*Z'eej(e&ej d krd+d,Z)d-d.Z*eeje)n(d/d,Z)d0d.Z*eeje)dS)1N)context send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsgeZdZdZiZejZfddZe ddZ e dddZ e j Z S) rz)Pickler subclass used by multiprocessing.cs9tj||jj|_|jj|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__>/opt/alt/python34/lib64/python3.4/multiprocessing/reduction.pyr%szForkingPickler.__init__cCs||j|r.r3r4r0r/r?r5r6)rrCrrrr;ts zDupHandle.detach)r"r#r$r%rr;rrrrr+cs DupFdsendfdsrecvfdsdarwincCs~tjd|}tt|dg}|j|gtjtj|fgtrz|jddkrzt dndS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGEr: RuntimeError)sockZfdsmsgrrrrEs %c CsTtjd}|j|}|jdtj|\}}}}| rZ| rZtnytrs|jdnt|dkrt dt|n|d\}} } |tj kr(| tj kr(t| |jdkrt n|j | t|d|dkstt|SWnt tfk rCYnXt ddS) z/Receive an array of fds over an AF_UNIX socket.rHrrJzreceived %d items of ancdatarrIzInvalid data receivedN)rKitemsizeZrecvmsgrNr EOFErrorrPr7rMrQrOr ValueErrorZ frombytesAssertionErrorlist IndexError) rRsizeaZ bytes_sizerSZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrFs, '    c Cs>tj|jtjtj}t||gWdQXdS)z&Send a handle over a local connection.N)rNfromfdfilenoAF_UNIX SOCK_STREAMrE)r8r2r9srrrrs$c Cs?tj|jtjtj}t|ddSWdQXdS)z)Receive a handle over a local connection.rrN)rNr]r^r_r`rF)r8rarrrrs$cCsatj}|dk r.|j|j|StrQddlm}|j|StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrDZduplicate_for_childHAVE_SEND_HANDLErbrV)fdZ popen_objrbrrrrDs   cCsE|jdkr(t|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r")mrrr_reduce_methodsrjc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r"r#r$rlrrrrrks rkcCst|j|jffS)N)rg __objclass__r")rirrr_reduce_method_descriptorsrncCs"t|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrscCstj|||S)N) functoolspartial)rprrqrrrrosrocCs#ddlm}t||ffS)Nr) DupSocket)rbrv_rebuild_socket)rarvrrr_reduce_socketsrxcCs |jS)N)r;)ZdsrrrrwsrwcCs1t|j}t||j|j|jffS)N)rDr^rwfamilyrproto)radfrrrrxscCs%|j}tj|||d|S)Nr^)r;rN)r{ryrrzrerrrrws )+r&rtrr<r(rNsysrdr__all__platformhasattrrcZPicklerrrrr.r,r-rrobjectr+rKrPrErFrDrjrkrrlrnrXappendint__add__rsrorurxrwrrrr s^           #