
    dj-                     "   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	e          Zn% G d
 d	e          Zd Zd Z e	j        ee            G d de          Z G d de          ZdS )    N)defaultdict   )	reductionassert_spawning)utilBufferWrapperwin32c                   B    e Zd ZdZ ej                    Zd Zd Zd Z	dS )ArenazL
        A shared memory area backed by anonymous memory (Windows).
        c                 t   || _         t          d          D ]p}dt          j                    t	          | j                  fz  }t          j        d||          }t          j                    dk    r n$|	                                 qt          d          || _        || _        | j         | j        f| _        d S )Nd   z	pym-%d-%stagnamer   zCannot find name for new mmap)sizerangeosgetpidnext_randmmap_winapiGetLastErrorcloseFileExistsErrornamebuffer_state)selfr   ir   bufs        &  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/heap.py__init__zArena.__init__&   s    DI3ZZ G G"bikk4
3C3C%DDiD$777'))Q..E		%&EFFFDIDK9di0DKKK    c                 .    t          |            | j        S N)r   r   )r   s    r"   __getstate__zArena.__getstate__5   s    D!!!;r$   c                 ~    |x\  | _         | _        | _        t          j        d| j         | j                  | _        d S )Nr   r   )r   r   r   r   r   )r   states     r"   __setstate__zArena.__setstate__9   s7    166 DIty4;)B	49EEEDKKKr$   N)
__name__
__module____qualname____doc__tempfile_RandomNameSequencer   r#   r'   r*    r$   r"   r   r      sb        	 	 -,..	1 	1 	1	 	 		F 	F 	F 	F 	Fr$   r   c                   B    e Zd ZdZej        dk    rdgZng ZddZd ZdS )	r   zJ
        A shared memory area backed by a temporary file (POSIX).
        linuxz/dev/shmr   c                    || _         || _        |dk    rt          j        dt	          j                    z  |                     |                    \  | _        }t	          j        |           t          j	        | t          j
        | j        f           t	          j        | j        |           t          j        | j        | j                   | _        d S )Nr   zpym-%d-)prefixdir)r   fdr/   mkstempr   r   _choose_dirunlinkr   Finalizer   	ftruncater   r   )r   r   r7   r   s       r"   r#   zArena.__init__M   s    DIDGRxx !) 0%bikk1))$//!1 !1 !1 	$dBHtwj999TWd+++)DGTY77DKKKr$   c                     | j         D ]-}t          j        |          }|j        |j        z  |k    r|c S .t          j                    S r&   )_dir_candidatesr   statvfsf_bavailf_frsizer   get_temp_dir)r   r   dsts       r"   r9   zArena._choose_dir[   sT     )  Z]];,44HHH 5$&&&r$   N)r   )	r+   r,   r-   r.   sysplatformr>   r#   r9   r1   r$   r"   r   r   C   s^        	 	 <7"")lOO O	8 	8 	8 	8	' 	' 	' 	' 	'r$   c                     | j         dk    rt          d          t          | j        t	          j        | j                   ffS )Nr   zDArena is unpicklable because forking was enabled when it was created)r7   
ValueErrorrebuild_arenar   r   DupFd)as    r"   reduce_arenarL   d   sF    42:: G H H Hqvyqt'<'<===r$   c                 F    t          | |                                          S r&   )r   detach)r   dupfds     r"   rI   rI   j   s    T5<<>>***r$   c                   z    e Zd ZdZdZdZej        fdZe	d             Z
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd ZdS )Heap   i  @ c                    t          j                    | _        t          j                    | _        || _        g | _        i | _        i | _	        i | _
        t          t                    | _        g | _        g | _        d| _        d| _        d S Nr   )r   r   _lastpid	threading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   s     r"   r#   zHeap.__init__{   s    	^%%

   " ! "-S!1!1 %'! r$   c                     |dz
  }| |z   | z  S )Nr   r1   )n	alignmentmasks      r"   _roundupzHeap._roundup   s     1}DTE!!r$   c                 .   |                      t          | j        |          t          j                  }| j        | j        k     r| xj        dz  c_        t          j        d|           t          |          }| j	        
                    |           |d|fS )N   z"allocating a new mmap of length %dr   )rh   maxrY   r   PAGESIZE_DOUBLE_ARENA_SIZE_UNTILr   infor   r`   append)r   r   lengtharenas       r"   
_new_arenazHeap._new_arena   s    s4:t44dmDD :555JJ!OJJ	6???fE"""q&!!r$   c                 \   |j         }|| j        k     rd S | j                            |          }|rJ | j        |df= | j        ||f= | j                            |           | j        |         }|                    |d|f           |s$| j        |= | j	                            |           d S d S rT   )
r   _DISCARD_FREE_SPACE_LARGER_THANr_   popr\   r]   r`   remover[   rZ   )r   rq   rp   blocksseqs        r"   _discard_arenazHeap._discard_arena   s     D888F'++E22 %,0E"""v&

E1f%&&& 	) (M  (((((	) 	)r$   c                 H   t          j        | j        |          }|t          | j                  k    r|                     |          S | j        |         }| j        |         }|                                }|s| j        |= | j        |= |\  }}}| j        ||f= | j        ||f= |S r&   )	bisectbisect_leftrZ   lenrr   r[   ru   r\   r]   )	r   r   r    rp   rx   blockrq   startstops	            r"   _malloczHeap._malloc   s    t}d33DM""""??4(((]1%F"6*CGGIIE ?$V,dmA.>$t %0.r$   c                    |\  }}}	 | j         ||f         }|                     |          \  }}n# t          $ r Y nw xY w	 | j        ||f         }|                     |          \  }}n# t          $ r Y nw xY w|||f}||z
  }	 | j        |                             |           n5# t          $ r( |g| j        |<   t          j        | j        |           Y nw xY w|| j        ||f<   || j         ||f<   d S r&   )	r]   _absorbKeyErrorr\   r[   ro   r{   insortrZ   )	r   r~   rq   r   r   
prev_block_
next_blockrp   s	            r"   _add_free_blockzHeap._add_free_block   sY   $t	0,eU^<J ||J//HE11  	 	 	D	
	/-udm<J ll:..GAtt  	 	 	D	
 t$	1V$++E2222 	1 	1 	1(-wDV$M$-00000	1 05eU^,-2UDM***s0   0 
==A) )
A65A6 B% %/CCc                     |\  }}}| j         ||f= | j        ||f= ||z
  }| j        |         }|                    |           |s"| j        |= | j                            |           ||fS r&   )r\   r]   r[   rv   rZ   )r   r~   rq   r   r   rp   rx   s          r"   r   zHeap._absorb   s    $t %0.v&

5 	) (M  (((d{r$   c                     |\  }}}| j         |         }|                    ||f           |s|                     |           d S d S r&   )r_   rv   ry   )r   r~   rq   r   r   rw   s         r"   _remove_allocated_blockzHeap._remove_allocated_block   s]    "ud'.udm$$$ 	'&&&&&	' 	'r$   c                     	 	 | j                                         }n# t          $ r Y d S w xY w|                     |           |                     |           Wr&   )ra   ru   
IndexErrorr   r   r   r~   s     r"   _free_pending_blockszHeap._free_pending_blocks  sq    	015577     '''((///	0s    
++c                 (   t          j                    | j        k    r9t          d                    t          j                    | j                            | j                            d          s| j                            |           d S 	 | xj	        dz  c_	        | 
                                 |                     |           |                     |           | j                                         d S # | j                                         w xY w)Nz$My pid ({0:n}) is not last pid {1:n}Fr   )r   r   rU   rH   formatrX   acquirera   ro   rc   r   r   r   releaser   s     r"   freez	Heap.free  s    9;;$-''6==IKK/ /0 0 0 z!!%(( 	% %,,U33333%"))+++$$U+++,,U333
""$$$$$
""$$$$s   AC6 6Dc                    |dk     r"t          d                    |                    t          j        |k    r"t	          d                    |                    t          j                    | j        k    r|                                  | j	        5  | xj
        dz  c_
        |                                  |                     t          |d          | j                  }|                     |          \  }}}||z   }||k     r|                     |||f           | j        |                             ||f           |||fcd d d            S # 1 swxY w Y   d S )Nr   Size {0:n} out of rangeSize {0:n} too larger   )rH   r   rE   maxsizeOverflowErrorr   r   rU   r#   rX   rb   r   rh   rk   
_alignmentr   r   r_   add)r   r   rq   r   r   	real_stops         r"   malloczHeap.malloc(  s   !886==dCCDDD;$ 6 = =d C CDDD9;;$-''MMOOOZ 	- 	-OOq OO%%'''==T1t??D#'<<#5#5 UE4I4 $$eY%=>>>"5)--ui.@AAA5),	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   B0EEEN)r+   r,   r-   r   rt   rm   r   rl   r#   staticmethodrh   rr   ry   r   r   r   r   r   r   r   r1   r$   r"   rQ   rQ   s   s         J&3#, M    : " " \"

" 
" 
") ) )$  "3 3 3<  ' ' '0 0 0% % %8- - - - -r$   rQ   c                   .    e Zd Z e            Zd Zd ZdS )r   c                 X   |dk     r"t          d                    |                    t          j        |k    r"t	          d                    |                    t
          j                            |          }||f| _        t          j
        | t
          j        j        |f           d S )Nr   r   r   )args)rH   r   rE   r   r   r   _heapr   r   r   r;   r   )r   r   r~   s      r"   r#   zBufferWrapper.__init__F  s    !886==dCCDDD;$ 6 = =d C CDDD#**400dmdM/4E8DDDDDDr$   c                 \    | j         \  \  }}}}t          |j                  |||z            S r&   )r   
memoryviewr   )r   rq   r   r   r   s        r"   create_memoryviewzBufferWrapper.create_memoryviewO  s3    %)["td%,''eDj(899r$   N)r+   r,   r-   rQ   r   r#   r   r1   r$   r"   r   r   B  s@        DFFEE E E: : : : :r$   )r{   collectionsr   r   r   rE   r/   rV   contextr   r    r   __all__rF   r   objectr   rL   rI   registerrQ   r   r1   r$   r"   <module>r      s    # # # # # #  				 



      / / / / / / / /      
 <7NNNF F F F F F F F FH' ' ' ' ' ' ' 'B> > >+ + + Iul+++I- I- I- I- I-6 I- I- I-^: : : : :F : : : : :r$   