
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aj-  ã                   @   sÒ   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
 ddlmZ dgZejdkr‚d dlZG dd	„ d	eƒZn,G d
d	„ d	eƒZdd„ Zdd„ Ze	 ee¡ G dd„ deƒZG dd„ deƒZdS )é    N)Údefaultdicté   )Ú	reductionÚassert_spawning)ÚutilÚBufferWrapperZwin32c                   @   s0   e Zd ZdZe ¡ Zdd„ Zdd„ Zdd„ Z	dS )	ÚArenazL
        A shared memory area backed by anonymous memory (Windows).
        c                 C   sx   || _ tdƒD ]B}dt ¡ t| jƒf }tjd||d�}t ¡ dkrH qZ| 	¡  qt
dƒ‚|| _|| _| j | jf| _d S )Néd   z	pym-%d-%séÿÿÿÿ©Ztagnamer   zCannot find name for new mmap)ÚsizeÚrangeÚosÚgetpidÚnextÚ_randÚmmapÚ_winapiZGetLastErrorÚcloseÚFileExistsErrorÚnameÚbufferÚ_state)Úselfr   Úir   Zbuf© r   ú9/opt/alt/python38/lib64/python3.8/multiprocessing/heap.pyÚ__init__&   s    
úArena.__init__c                 C   s   t | ƒ | jS ©N)r   r   )r   r   r   r   Ú__getstate__5   s    zArena.__getstate__c                 C   s,   | \| _ | _| _tjd| j | jd�| _d S )Nr
   r   )r   r   r   r   r   )r   Ústater   r   r   Ú__setstate__9   s    zArena.__setstate__N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚtempfileZ_RandomNameSequencer   r   r    r"   r   r   r   r   r      s
   r   c                   @   s8   e Zd ZdZejdkrdgZng Zd
dd„Zdd„ Zd	S )r   zJ
        A shared memory area backed by a temporary file (POSIX).
        Zlinuxz/dev/shmr
   c                 C   sx   || _ || _|dkrbtjdt ¡  |  |¡d�\| _}t |¡ t 	| tj
| jf¡ t | j|¡ t | j| j ¡| _d S )Nr
   zpym-%d-)ÚprefixÚdir)r   Úfdr'   Zmkstempr   r   Ú_choose_dirÚunlinkr   ÚFinalizer   Ú	ftruncater   r   )r   r   r*   r   r   r   r   r   M   s    
þ
r   c                 C   s6   | j D ]&}t |¡}|j|j |kr|  S qt ¡ S r   )Ú_dir_candidatesr   ÚstatvfsÚf_bavailÚf_frsizer   Zget_temp_dir)r   r   ÚdÚstr   r   r   r+   [   s
    


zArena._choose_dirN)r
   )	r#   r$   r%   r&   ÚsysÚplatformr/   r   r+   r   r   r   r   r   C   s   

c                 C   s(   | j dkrtdƒ‚t| jt | j ¡ffS )Nr
   zDArena is unpicklable because forking was enabled when it was created)r*   Ú
ValueErrorÚrebuild_arenar   r   ZDupFd)Úar   r   r   Úreduce_arenad   s    
r:   c                 C   s   t | | ¡ ƒS r   )r   Údetach)r   Zdupfdr   r   r   r8   j   s    r8   c                   @   sz   e Zd ZdZdZdZejfdd„Ze	dd„ ƒZ
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚHeapé   i  @ c                 C   sX   t  ¡ | _t ¡ | _|| _g | _i | _i | _	i | _
ttƒ| _g | _g | _d| _d| _d S ©Nr   )r   r   Ú_lastpidÚ	threadingZLockÚ_lockÚ_sizeÚ_lengthsÚ_len_to_seqÚ_start_to_blockÚ_stop_to_blockr   ÚsetÚ_allocated_blocksÚ_arenasÚ_pending_free_blocksÚ
_n_mallocsÚ_n_frees)r   r   r   r   r   r   {   s    


zHeap.__init__c                 C   s   |d }| | | @ S )Nr   r   )ÚnZ	alignmentÚmaskr   r   r   Ú_roundup˜   s    zHeap._roundupc                 C   sZ   |   t| j|ƒtj¡}| j| jk r0|  jd9  _t d|¡ t|ƒ}| j	 
|¡ |d|fS )Né   z"allocating a new mmap of length %dr   )rO   ÚmaxrB   r   ÚPAGESIZEÚ_DOUBLE_ARENA_SIZE_UNTILr   Úinfor   rI   Úappend)r   r   ÚlengthÚarenar   r   r   Ú
_new_arenaž   s    zHeap._new_arenac                 C   s‚   |j }|| jk rd S | j |¡}|r(t‚| j|df= | j||f= | j |¡ | j	| }| |d|f¡ |s~| j	|= | j
 |¡ d S r>   )r   Ú_DISCARD_FREE_SPACE_LARGER_THANrH   ÚpopÚAssertionErrorrE   rF   rI   ÚremoverD   rC   )r   rW   rV   ÚblocksÚseqr   r   r   Ú_discard_arenaª   s    

zHeap._discard_arenac           	      C   s|   t  | j|¡}|t| jƒkr&|  |¡S | j| }| j| }| ¡ }|sV| j|= | j|= |\}}}| j||f= | j||f= |S r   )	ÚbisectZbisect_leftrC   ÚlenrX   rD   rZ   rE   rF   )	r   r   r   rV   r^   ÚblockrW   ÚstartÚstopr   r   r   Ú_malloc¼   s    



zHeap._mallocc           	      C   sì   |\}}}z| j ||f }W n tk
r0   Y nX |  |¡\}}z| j||f }W n tk
rf   Y nX |  |¡\}}|||f}|| }z| j|  |¡ W n. tk
rÊ   |g| j|< t | j|¡ Y nX || j||f< || j ||f< d S r   )	rF   ÚKeyErrorÚ_absorbrE   rD   rU   r`   ZinsortrC   )	r   rb   rW   rc   rd   Z
prev_blockÚ_Z
next_blockrV   r   r   r   Ú_add_free_blockÍ   s(    

zHeap._add_free_blockc                 C   s^   |\}}}| j ||f= | j||f= || }| j| }| |¡ |sV| j|= | j |¡ ||fS r   )rE   rF   rD   r\   rC   )r   rb   rW   rc   rd   rV   r^   r   r   r   rg   ë   s    


zHeap._absorbc                 C   s4   |\}}}| j | }| ||f¡ |s0|  |¡ d S r   )rH   r\   r_   )r   rb   rW   rc   rd   r]   r   r   r   Ú_remove_allocated_blockú   s
    

zHeap._remove_allocated_blockc                 C   sB   z| j  ¡ }W n tk
r&   Y q>Y nX |  |¡ |  |¡ q d S r   )rJ   rZ   Ú
IndexErrorri   rj   ©r   rb   r   r   r   Ú_free_pending_blocks  s    

zHeap._free_pending_blocksc                 C   s~   t  ¡ | jkr$td t  ¡ | j¡ƒ‚| j d¡s>| j |¡ n<z.|  j
d7  _
|  ¡  |  |¡ |  |¡ W 5 | j 	¡  X d S )Nz$My pid ({0:n}) is not last pid {1:n}Fr   )r   r   r?   r7   ÚformatrA   ÚacquirerJ   rU   ÚreleaserL   rm   ri   rj   rl   r   r   r   Úfree  s    
 ÿÿ
z	Heap.freec              
   C   sÚ   |dk rt d |¡ƒ‚tj|kr.td |¡ƒ‚t ¡ | jkrD|  ¡  | j	�† |  j
d7  _
|  ¡  |  t|dƒ| j¡}|  |¡\}}}|| }||k r¦|  |||f¡ | j|  ||f¡ |||fW  5 Q R £ S Q R X d S )Nr   úSize {0:n} out of rangeúSize {0:n} too larger   )r7   rn   r5   ÚmaxsizeÚOverflowErrorr   r   r?   r   rA   rK   rm   rO   rQ   Ú
_alignmentre   ri   rH   Úadd)r   r   rW   rc   rd   Z	real_stopr   r   r   Úmalloc(  s     
zHeap.mallocN)r#   r$   r%   rv   rY   rS   r   rR   r   ÚstaticmethodrO   rX   r_   re   ri   rg   rj   rm   rq   rx   r   r   r   r   r<   s   s   

r<   c                   @   s"   e Zd Zeƒ Zdd„ Zdd„ ZdS )r   c                 C   s^   |dk rt d |¡ƒ‚tj|kr.td |¡ƒ‚tj |¡}||f| _t	j
| tjj|fd� d S )Nr   rr   rs   )Úargs)r7   rn   r5   rt   ru   r   Ú_heaprx   r   r   r-   rq   )r   r   rb   r   r   r   r   F  s    

zBufferWrapper.__init__c                 C   s&   | j \\}}}}t|jƒ||| … S r   )r   Ú
memoryviewr   )r   rW   rc   rd   r   r   r   r   Úcreate_memoryviewO  s    zBufferWrapper.create_memoryviewN)r#   r$   r%   r<   r{   r   r}   r   r   r   r   r   B  s   	)r`   Úcollectionsr   r   r   r5   r'   r@   Úcontextr   r   Ú r   Ú__all__r6   r   Úobjectr   r:   r8   Úregisterr<   r   r   r   r   r   Ú<module>
   s&   
$! P