a XC?hj-�@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@s0eZdZdZe��Zdd�Zdd�Zdd�Z dS) �ArenazL A shared memory area backed by anonymous memory (Windows). cCsx||_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�9/opt/alt/python39/lib64/python3.9/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__�__doc__�tempfileZ_RandomNameSequencerrr r"rrrrrs rc@s8eZdZdZejdkrdgZngZd dd�Zdd�Zd S) rzJ A shared memory area backed by a temporary file (POSIX). Zlinuxz/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%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 r:cCst||���Sr)r�detach)r Zdupfdrrrr8jsr8c@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) rO�maxrBr�PAGESIZE�_DOUBLE_ARENA_SIZE_UNTILr�inforrI�append)rr �length�arenarrr� _new_arena�s   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_THANrH�poprErFrI�removerDrC)rrWrV�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_leftrC�lenrXrDrZrErF) rr rrVr]�blockrW�start�stoprrr�_malloc�s      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) rF�KeyError�_absorbrErDrUr_ZinsortrC) rrarWrbrcZ prev_block�_Z next_blockrVrrr�_add_free_block�s(      zHeap._add_free_blockcCs^|\}}}|j||f=|j||f=||}|j|}|�|�|sV|j|=|j�|�||fSr)rErFrDr[rC)rrarWrbrcrVr]rrrrf�s      z Heap._absorbcCs4|\}}}|j|}|�||f�|s0|�|�dSr)rHr[r^)rrarWrbrcr\rrr�_remove_allocated_block�s   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?r7�formatrA�acquirerJrUrLrlrhri�releaserkrrr�free s  ��   z Heap.freecCs�|dkrtd�|���tj|kr.td�|���t��|jkrD|��|j ��|j d7_ |� �|� t |d�|j�}|�|�\}}}||}||kr�|�|||f�|j|�||f�|||fWd�S1s�0YdS)Nr�Size {0:n} out of range�Size {0:n} too larger)r7rmr5�maxsize� OverflowErrorrrr?rrArKrlrOrQ� _alignmentrdrhrH�add)rr rWrbrcZ real_stoprrr�malloc(s  z Heap.mallocN)r#r$r%rurYrSrrRr� staticmethodrOrXr^rdrhrfrirlrprwrrrrr<ss   r<c@s"eZdZe�Zdd�Zdd�ZdS)rcCs^|dkrtd�|���tj|kr.td�|���tj�|�}||f|_t j |tjj |fd�dS)Nrrqrr)�args) r7rmr5rsrtr�_heaprwrrr-rp)rr rarrrrFs   zBufferWrapper.__init__cCs&|j\\}}}}t|j�|||�Sr)r� memoryviewr)rrWrbrcr rrr�create_memoryviewOszBufferWrapper.create_memoryviewN)r#r$r%r<rzrr|rrrrrBs )r_� collectionsrrrr5r'r@�contextrr�r�__all__r6r�objectrr:r8�registerr<rrrrr� s&   $! P