U e5dj-ã@sÒddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkr‚ddlZGdd „d eƒZn,Gd d „d eƒZd d „Zd d„Ze  ee¡Gdd„deƒZGdd„deƒZdS)éN)Ú defaultdicté)Ú reductionÚassert_spawning)ÚutilÚ BufferWrapperZwin32c@s,eZdZe ¡Zdd„Zdd„Zdd„ZdS)ÚArenacCsx||_tdƒD]B}dt ¡t|jƒf}tjd||d�}t ¡dkrHqZ|  ¡qt dƒ‚||_ ||_ |j|j f|_ dS)Nédz pym-%d-%séÿÿÿÿ©ZtagnamerzCannot find name for new mmap)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapÚ_winapiZ GetLastErrorÚcloseÚFileExistsErrorÚnameÚbufferÚ_state)Úselfr ÚirZbuf©rú,/usr/lib64/python3.8/multiprocessing/heap.pyÚ__init__&s   úArena.__init__cCst|ƒ|jS©N)rr)rrrrÚ __getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd�|_dS)Nr r )r rrrr)rÚstaterrrÚ __setstate__9szArena.__setstate__N) Ú__name__Ú __module__Ú __qualname__ÚtempfileZ_RandomNameSequencerrr r"rrrrrsrc@s4eZdZejdkrdgZngZd dd„Zdd„ZdS) rZlinuxz/dev/shmr cCsx||_||_|dkrbtjdt ¡| |¡d�\|_}t |¡t  |tj |jf¡t  |j|¡t   |j|j¡|_ dS)Nr zpym-%d-)ÚprefixÚdir)r Úfdr&ZmkstemprrÚ _choose_dirÚunlinkrÚFinalizerÚ ftruncaterr)rr r)rrrrrMs þ  rcCs6|jD]&}t |¡}|j|j|kr|Sqt ¡Sr)Ú_dir_candidatesrÚstatvfsÚf_bavailÚf_frsizerZ get_temp_dir)rr ÚdÚstrrrr*[s    zArena._choose_dirN)r )r#r$r%ÚsysÚplatformr.rr*rrrrrCs   cCs(|jdkrtdƒ‚t|jt |j¡ffS)Nr zDArena is unpicklable because forking was enabled when it was created)r)Ú ValueErrorÚ rebuild_arenar rZDupFd)ÚarrrÚ reduce_arenads r9cCst|| ¡ƒSr)rÚdetach)r Zdupfdrrrr7jsr7c@szeZdZdZdZdZejfdd„Ze dd„ƒZ dd„Z d d „Z d d „Z d d„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS)ÚHeapéi@cCsXt ¡|_t ¡|_||_g|_i|_i|_ i|_ t t ƒ|_ g|_g|_d|_d|_dS©Nr)rrÚ_lastpidÚ threadingZLockÚ_lockÚ_sizeÚ_lengthsÚ _len_to_seqÚ_start_to_blockÚ_stop_to_blockrÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocksÚ _n_mallocsÚ_n_frees)rr rrrr{s   z Heap.__init__cCs|d}|||@S)Nrr)ÚnZ alignmentÚmaskrrrÚ_roundup˜sz Heap._roundupcCsZ| t|j|ƒtj¡}|j|jkr0|jd9_t d|¡t|ƒ}|j   |¡|d|fS)Néz"allocating a new mmap of length %dr) rNÚmaxrArÚPAGESIZEÚ_DOUBLE_ARENA_SIZE_UNTILrÚinforrHÚappend)rr ÚlengthÚarenarrrÚ _new_arenažs   zHeap._new_arenacCsz|j}||jkrdS|j |¡}|j|df=|j||f=|j |¡|j|}| |d|f¡|sv|j|=|j  |¡dSr=) r Ú_DISCARD_FREE_SPACE_LARGER_THANrGÚpoprDrErHÚremoverCrB)rrVrUÚblocksÚseqrrrÚ_discard_arenaªs      zHeap._discard_arenac Cs|t |j|¡}|t|jƒkr&| |¡S|j|}|j|}| ¡}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr) ÚbisectZ bisect_leftrBÚlenrWrCrYrDrE) rr rrUr\ÚblockrVÚstartÚstoprrrÚ_malloc¼s      z Heap._mallocc Csì|\}}}z|j||f}Wntk r0YnX| |¡\}}z|j||f}Wntk rfYnX| |¡\}}|||f}||}z|j| |¡Wn.tk rÊ|g|j|<t |j|¡YnX||j||f<||j||f<dSr) rEÚKeyErrorÚ_absorbrDrCrTr^ZinsortrB) rr`rVrarbZ prev_blockÚ_Z next_blockrUrrrÚ_add_free_blockÍs(   zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}| |¡|sV|j|=|j |¡||fSr)rDrErCrZrB)rr`rVrarbrUr\rrrreës      z Heap._absorbcCs4|\}}}|j|}| ||f¡|s0| |¡dSr)rGrZr])rr`rVrarbr[rrrÚ_remove_allocated_blockús   zHeap._remove_allocated_blockcCsBz|j ¡}Wntk r&Yq>YnX| |¡| |¡qdSr)rIrYÚ IndexErrorrgrh©rr`rrrÚ_free_pending_blockss   zHeap._free_pending_blockscCs~t ¡|jkr$td t ¡|j¡ƒ‚|j d¡s>|j |¡nr6Úformatr@ÚacquirerIrTÚreleaserKrkrgrhrjrrrÚfree s ÿÿ  z Heap.freec CsÚ|dkrtd |¡ƒ‚tj|kr.td |¡ƒ‚t ¡|jkrD| ¡|j �†|j d7_ |  ¡|  t |dƒ|j¡}| |¡\}}}||}||kr¦| |||f¡|j| ||f¡|||fW5QR£SQRXdS)NrúSize {0:n} out of rangeúSize {0:n} too larger)r6rlr4ÚmaxsizeÚ OverflowErrorrrr>rr@rJrkrNrPÚ _alignmentrcrgrGÚadd)rr rVrarbZ real_stoprrrÚmalloc(s  z Heap.mallocN)r#r$r%rtrXrRrrQrÚ staticmethodrNrWr]rcrgrerhrkrorvrrrrr;ss   r;c@s"eZdZeƒZdd„Zdd„ZdS)rcCs^|dkrtd |¡ƒ‚tj|kr.td |¡ƒ‚tj |¡}||f|_t j |tjj |fd�dS)Nrrprq)Úargs) r6rlr4rrrsrÚ_heaprvrrr,ro)rr r`rrrrFs   zBufferWrapper.__init__cCs&|j\\}}}}t|jƒ|||…Sr)rÚ memoryviewr)rrVrarbr rrrÚcreate_memoryviewOszBufferWrapper.create_memoryviewN)r#r$r%r;ryrr{rrrrrBs )r^Ú collectionsrrrr4r&r?ÚcontextrrÚrÚ__all__r5rÚobjectrr9r7Úregisterr;rrrrrÚ s&   $! P