a DOgj-@sddlZddlmZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z dgZ ejdkrddlZGdd d eZn,Gd d d eZd d Zd dZe eeGdddeZGdddeZdS)N) defaultdict) reductionassert_spawning)util BufferWrapperZwin32c@s0eZdZdZeZddZddZddZ dS) ArenazL A shared memory area backed by anonymous memory (Windows). cCsx||_tdD]B}dtt|jf}tjd||d}tdkrHqZ| qt d||_ ||_ |j|j f|_ dS)Ndz pym-%d-%sZtagnamerzCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiZ GetLastErrorcloseFileExistsErrornamebuffer_state)selfr irZbufr9/opt/alt/python39/lib64/python3.9/multiprocessing/heap.py__init__&s   Arena.__init__cCst||jSN)rr)rrrr __getstate__5szArena.__getstate__cCs,|\|_|_|_tjd|j|jd|_dS)Nr r )r rrrr)rstaterrr __setstate__9szArena.__setstate__N) __name__ __module__ __qualname____doc__tempfileZ_RandomNameSequencerrr r"rrrrrs rc@s8eZdZdZejdkrdgZngZd ddZddZd S) rzJ A shared memory area backed by a temporary file (POSIX). Zlinuxz/dev/shmr cCsx||_||_|dkrbtjdt||d\|_}t|t |tj |jft |j|t |j|j|_ dS)Nr zpym-%d-)prefixdir)r fdr'Zmkstemprr _choose_dirunlinkrFinalizer ftruncaterr)rr r*rrrrrMs   rcCs6|jD]&}t|}|j|j|kr|SqtSr)_dir_candidatesrstatvfsf_bavailf_frsizerZ get_temp_dir)rr dstrrrr+[s    zArena._choose_dirN)r ) r#r$r%r&sysplatformr/rr+rrrrrCs   cCs(|jdkrtdt|jt|jffS)Nr zDArena is unpicklable because forking was enabled when it was created)r* ValueError rebuild_arenar rZDupFd)arrr reduce_arenads r:cCst||Sr)rdetach)r Zdupfdrrrr8jsr8c@szeZdZdZdZdZejfddZe ddZ ddZ d d Z d d Z d dZddZddZddZddZddZdS)Heapi@cCsXt|_t|_||_g|_i|_i|_ i|_ t t |_ g|_g|_d|_d|_dSNr)rr_lastpid threadingZLock_lock_size_lengths _len_to_seq_start_to_block_stop_to_blockrset_allocated_blocks_arenas_pending_free_blocks _n_mallocs_n_frees)rr rrrr{s   z Heap.__init__cCs|d}|||@S)Nrr)nZ alignmentmaskrrr_roundupsz Heap._roundupcCsZ|t|j|tj}|j|jkr0|jd9_td|t|}|j ||d|fS)Nz"allocating a new mmap of length %dr) rOmaxrBrPAGESIZE_DOUBLE_ARENA_SIZE_UNTILrinforrIappend)rr lengtharenarrr _new_arenas   zHeap._new_arenacCs|j}||jkrdS|j|}|r(J|j|df=|j||f=|j||j|}||d|f|s~|j|=|j |dSr>) r _DISCARD_FREE_SPACE_LARGER_THANrHpoprErFrIremoverDrC)rrWrVblocksseqrrr_discard_arenas      zHeap._discard_arenac Cs|t|j|}|t|jkr&||S|j|}|j|}|}|sV|j|=|j|=|\}}}|j||f=|j||f=|Sr) bisectZ bisect_leftrClenrXrDrZrErF) rr rrVr]blockrWstartstoprrr_mallocs      z Heap._mallocc Cs|\}}}z|j||f}Wnty.Yn0||\}}z|j||f}WntybYn0||\}}|||f}||}z|j||Wn,ty|g|j|<t|j|Yn0||j||f<||j||f<dSr) rFKeyError_absorbrErDrUr_ZinsortrC) rrarWrbrcZ prev_block_Z next_blockrVrrr_add_free_blocks(      zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|||sV|j|=|j|||fSr)rErFrDr[rC)rrarWrbrcrVr]rrrrfs      z Heap._absorbcCs4|\}}}|j|}|||f|s0||dSr)rHr[r^)rrarWrbrcr\rrr_remove_allocated_blocks   zHeap._remove_allocated_blockcCs@z|j}Wnty$Yq|j|nFz8|j d7_ | | || |W|j n |j 0dS)Nz$My pid ({0:n}) is not last pid {1:n}Fr)rrr?r7formatrAacquirerJrUrLrlrhrireleaserkrrrfree s     z Heap.freecCs|dkrtd|tj|kr.td|t|jkrD||j |j d7_ | | t |d|j}||\}}}||}||kr||||f|j|||f|||fWdS1s0YdS)NrSize {0:n} out of rangeSize {0:n} too larger)r7rmr5maxsize OverflowErrorrrr?rrArKrlrOrQ _alignmentrdrhrHadd)rr rWrbrcZ real_stoprrrmalloc(s  z Heap.mallocN)r#r$r%rurYrSrrRr staticmethodrOrXr^rdrhrfrirlrprwrrrrr<ss   r<c@s"eZdZeZddZddZdS)rcCs^|dkrtd|tj|kr.td|tj|}||f|_t j |tjj |fddS)Nrrqrr)args) r7rmr5rsrtr_heaprwrrr-rp)rr rarrrrFs   zBufferWrapper.__init__cCs&|j\\}}}}t|j|||Sr)r memoryviewr)rrWrbrcr rrrcreate_memoryviewOszBufferWrapper.create_memoryviewN)r#r$r%r<rzrr|rrrrrBs )r_ collectionsrrrr5r'r@contextrrr__all__r6robjectrr:r8registerr<rrrrr s&   $! P