o
    Df#                     @   s   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rQG d
d dZnG dd dZdd Zdd Ze
ee G dd dZG dd dZdS )    N   )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 ]!}dt t| jf }tjd||d}t dkr$ n|	  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   GetLastErrorcloseIOErrorerrnoEEXISTnamebuffer_state)selfr   ir   bufexc r"   F/home/ubuntu/webapp/venv/lib/python3.10/site-packages/billiard/heap.py__init__'   s   
Arena.__init__c                 C   s   t |  | jS N)r   assert_spawningr   r   r"   r"   r#   __getstate__8   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   sD  || _ || _|dkrtrptjdt f t d\| _}t	| t
| tj| jf tj| jddd2}d}||krOd| }t|| D ]}|| qF~|d||   | |ks`J W d    n1 sjw   Y  n'tjdt f t d\| _}t	| t
| tj| jf t| j| t| j| j | _d S )	Nr   zpym-%d-)prefixdirwbF)closefdi       )r   fdPY3r/   mkstempr   r   r   get_temp_dirunlinkFinalizer   ioopenr   writetell	ftruncater   r   )r   r   r6   r   fbszeros_r"   r"   r#   r$   G   s:   


r%   N)r   )r,   r-   r.   r$   r"   r"   r"   r#   r
   E   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)r6   
ValueErrorrebuild_arenar   r   DupFd)ar"   r"   r#   reduce_arenaf   s   
rI   c                 C   s   t | | S r&   )r
   detach)r   dupfdr"   r"   r#   rF   l   s   rF   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$   z   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r5| t| j|tj}|  jd9  _t	
d| t|}| j| |d|fS | j| }| j| }| }|sM| 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w | |\}}z	| j||f }W n	 ty1   Y nw | |\}}|||f}|| }z
| j| | W n tyb   |g| j|< t| j| Y nw || j||f< || j ||f< d S r&   )	rV   KeyError_absorbrU   rT   rg   ra   insortrS   )	r   rl   rj   rm   rn   
prev_blockrD   
next_blockri   r"   r"   r#   _free   s.   

z
Heap._freec                 C   s^   |\}}}| j ||f= | j||f= || }| j| }|| |s+| 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   s>   	 z| j  }W n
 ty   Y d S w | j| | | qr&   )rZ   rh   
IndexErrorrX   rv   ru   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| d S z|   | j	| | 
| W | j  d S | j  w )NF)r   r   rN   rQ   acquirerZ   rg   ry   rX   rv   ru   releaserx   r"   r"   r#   free   s   z	Heap.freec                 C   s   d|  krt jk sJ  J t | jkr|   | j; |   | t	|d| j
}| |\}}}|| }||k rD| |||f |||f}| j| |W  d    S 1 s[w   Y  d S )Nr   r   )sysmaxsizer   r   rN   r$   rQ   ry   r_   rd   
_alignmentro   ru   rX   add)r   r   rj   rm   rn   new_stoprl   r"   r"   r#   malloc   s   
$zHeap.mallocN)r,   r-   r.   r   r   re   r$   staticmethodr_   ro   ru   rq   ry   r|   r   r"   r"   r"   r#   rL   v   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   sN   d|  krt jk sJ  J tj|}||f| _tj| tjj|fd d S )Nr   )args)	r}   r~   r   _heapr   r   r   r;   r|   )r   r   rl   r"   r"   r#   r$     s   
zBufferWrapper.__init__c                 C   s4   | j \\}}}}t|j\}}||ksJ || S r&   )r   r   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    )ra   r   r<   r   r   r}   rO   r/    r   r   r   _extr   r   __all__version_infor7   platformr
   rI   rF   registerrL   r   r"   r"   r"   r#   <module>   s.   	
"! 