a
    xd$                     @   s   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Zd dlZd dl	Z	ddl
mZ ddl
mZ ddl
mZ ddlmZmZ dgZejd  d	kZejd
krG 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 )    )absolute_importN   )context)	reduction)util)	_billiardwin32BufferWrapper   r   c                   @   s,   e Zd Ze Zdd Zdd Zdd ZdS )Arenac                 C   s   || _ tdD ]B}dt t| jf }tjd||d}t dkrH qf|	  qt
d}tj|_||| _|| _| j | jf| _d S )Nd   z	pym-%d-%stagnamer   zCannot find name for new mmap)sizerangeosgetpidnext_randmmapr   ZGetLastErrorcloseIOErrorerrnoEEXISTnamebuffer_state)selfr   ir   bufexc r"   E/var/www/html/Ranjet/env/lib/python3.9/site-packages/billiard/heap.py__init__(   s    
Arena.__init__c                 C   s   t |  | jS N)r   Zassert_spawningr   r   r"   r"   r#   __getstate__9   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__=   s    zArena.__setstate__N)	__name__
__module____qualname__tempfile_RandomNameSequencer   r$   r(   r*   r"   r"   r"   r#   r   $   s   r   c                   @   s   e Zd ZdddZdS )r   r   c                 C   s^  || _ || _|dkrHtrtjdt f t d\| _}t	| t
| tj| jf tj| jdddd}d}||krd| }t|| D ]}|| q~|d||   | |ksJ W d    n1 s0    Y  nftjdt f t d}t|tjtjB tjB d	| _t
| tj| jf t	| t| j| t| j| j | _d S )
Nr   zpym-%d-)prefixdirwbF)closefdi       i  )r   fdPY3r.   mkstempr   r   r   Zget_temp_dirunlinkFinalizer   ioopenr   writetellmktempO_RDWRO_CREATO_EXCL	ftruncater   r   )r   r   r5   r   fbszeros_r"   r"   r#   r$   H   s<    

0
r%   N)r   )r+   r,   r-   r$   r"   r"   r"   r#   r   F   s   c                 C   s(   | j dkrtdt| jt| j ffS )Nr   zCArena is unpicklable becauseforking was enabled when it was created)r5   
ValueErrorrebuild_arenar   r   ZDupFd)ar"   r"   r#   reduce_arenaj   s    
rJ   c                 C   s   t | | S r&   )r   detach)r   Zdupfdr"   r"   r#   rH   p   s    rH   c                   @   sZ   e 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S )Heap   c                 C   sJ   t  | _t | _|| _g | _i | _i | _	i | _
t | _g | _g | _d S r&   )r   r   _lastpid	threadingLock_lock_size_lengths_len_to_seq_start_to_block_stop_to_blockset_allocated_blocks_arenas_pending_free_blocks)r   r   r"   r"   r#   r$   ~   s    

zHeap.__init__c                 C   s   |d }| | | @ S Nr   r"   )n	alignmentmaskr"   r"   r#   _roundup   s    zHeap._roundupc           	      C   s   t | j|}|t| jkrj| t| j|tj}|  jd9  _t	
d| t|}| j| |d|fS | j| }| j| }| }|s| j|= | j|= |\}}}| j||f= | j||f= |S )N   z"allocating a new mmap of length %dr   )bisectbisect_leftrS   lenr_   maxrR   r   PAGESIZEr   infor   rY   appendrT   poprU   rV   )	r   r   r   lengtharenaseqblockstartstopr"   r"   r#   _malloc   s"    



zHeap._mallocc           	      C   s   |\}}}z| j ||f }W n ty.   Y n0 | |\}}z| j||f }W n tyb   Y n0 | |\}}|||f}|| }z| j| | W n, ty   |g| j|< t| j| Y n0 || j||f< || j ||f< d S r&   )	rV   KeyError_absorbrU   rT   rg   ra   insortrS   )	r   rl   rj   rm   rn   Z
prev_blockrF   Z
next_blockri   r"   r"   r#   _free   s(    

z
Heap._freec                 C   s^   |\}}}| j ||f= | j||f= || }| j| }|| |sV| j|= | j| ||fS r&   )rU   rV   rT   removerS   )r   rl   rj   rm   rn   ri   rk   r"   r"   r#   rq      s    


zHeap._absorbc                 C   sB   z| j  }W n ty$   Y q>Y n0 | j| | | q d S r&   )rZ   rh   
IndexErrorrX   rt   rs   r   rl   r"   r"   r#   _free_pending_blocks   s    
zHeap._free_pending_blocksc                 C   sj   t  | jksJ | jds,| j| n:z,|   | j	| | 
| W | j  n| j  0 d S )NF)r   r   rN   rQ   acquirerZ   rg   rw   rX   rt   rs   releaserv   r"   r"   r#   free   s    z	Heap.freec                 C   s   d|  krt jk sn J t | jkr2|   | jv |   | t	|d| j
}| |\}}}|| }||k r| |||f |||f}| j| |W  d    S 1 s0    Y  d S )Nr   r   )sysmaxsizer   r   rN   r$   rQ   rw   r_   rd   
_alignmentro   rs   rX   add)r   r   rj   rm   rn   Znew_stoprl   r"   r"   r#   malloc   s    
zHeap.mallocN)r+   r,   r-   r}   r   re   r$   staticmethodr_   ro   rs   rq   rw   rz   r   r"   r"   r"   r#   rL   z   s   

rL   c                   @   s2   e Zd Ze Zdd Zdd Zdd Zdd Zd	S )
r	   c                 C   sL   d|  krt jk sn J tj|}||f| _tj| tjj|fd d S )Nr   )args)	r{   r|   r	   _heapr   r   r   r9   rz   )r   r   rl   r"   r"   r#   r$     s    
zBufferWrapper.__init__c                 C   s4   | j \\}}}}t|j\}}||ks,J || S r&   )r   r   Zaddress_of_bufferr   )r   rj   rm   rn   r   addressri   r"   r"   r#   get_address  s    zBufferWrapper.get_addressc                 C   s
   | j d S r[   )r   r'   r"   r"   r#   get_size  s    zBufferWrapper.get_sizec                 C   s&   | j \\}}}}t|j|||  S r&   )r   
memoryviewr   )r   rj   rm   rn   r   r"   r"   r#   create_memoryview  s    zBufferWrapper.create_memoryviewN)	r+   r,   r-   rL   r   r$   r   r   r   r"   r"   r"   r#   r	     s
   )
__future__r   ra   r   r:   r   r   r{   rO   r.    r   r   r   Z_extr   r   __all__version_infor6   platformobjectr   rJ   rH   registerrL   r	   r"   r"   r"   r#   <module>	   s.   
"$ 