ó
è¾bc           @   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	 m
 Z
 d  d l m Z d g Z e j d k rÇ d  d l m Z d e f d „  ƒ  YZ n d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   Finalizet   info(   t   assert_spawningt   BufferWrappert   win32(   R   t   Arenac           B   s/   e  Z e j ƒ  Z d  „  Z d „  Z d „  Z RS(   c         C   sƒ   | |  _  d t j ƒ  t j j ƒ  f |  _ t j d |  j  d |  j ƒ|  _ t	 j
 ƒ  d k sj t d ƒ ‚ |  j  |  j f |  _ d  S(   Ns	   pym-%d-%diÿÿÿÿt   tagnamei    s   tagname already in use(   t   sizet   ost   getpidR   t   _countert   nextt   namet   mmapt   bufferR   t   GetLastErrort   AssertionErrort   _state(   t   selfR   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   __init__=   s
    	"!c         C   s   t  |  ƒ |  j S(   N(   R   R   (   R   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   __getstate__D   s    
c         C   sY   | \ |  _  |  _ |  _ t j d |  j  d |  j ƒ|  _ t j ƒ  t j k sU t ‚ d  S(   NiÿÿÿÿR   (	   R   R   R   R   R   R   R   t   ERROR_ALREADY_EXISTSR   (   R   t   state(    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   __setstate__H   s    !(   t   __name__t
   __module__t	   itertoolst   countR
   R   R   R   (    (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   9   s   		c           B   s   e  Z d  „  Z RS(   c         C   s+   t  j  d | ƒ |  _ | |  _ d  |  _ d  S(   Niÿÿÿÿ(   R   R   R   t   NoneR   (   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   Q   s    	(   R   R   R   (    (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   O   s   t   Heapc           B   sb   e  Z d  Z e j d „ Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z RS(	   i   c         C   sm   t  j ƒ  |  _ t j ƒ  |  _ | |  _ g  |  _ i  |  _ i  |  _	 i  |  _
 t ƒ  |  _ g  |  _ g  |  _ d  S(   N(   R   R	   t   _lastpidt	   threadingt   Lockt   _lockt   _sizet   _lengthst   _len_to_seqt   _start_to_blockt   _stop_to_blockt   sett   _allocated_blockst   _arenast   _pending_free_blocks(   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   ^   s    						c         C   s   | d } |  | | @S(   Ni   (    (   t   nt	   alignmentt   mask(    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   _roundupk   s    
c   	      C   s  t  j |  j | ƒ } | t |  j ƒ k r |  j t |  j | ƒ t j ƒ } |  j d 9_ t	 d | ƒ t
 | ƒ } |  j j | ƒ | d | f S|  j | } |  j | } | j ƒ  } | sÓ |  j | =|  j | =n  | \ } } } |  j | | f =|  j | | f =| S(   Ni   s"   allocating a new mmap of length %di    (   t   bisectt   bisect_leftR#   t   lenR.   t   maxR"   R   t   PAGESIZER   R   R)   t   appendR$   t   popR%   R&   (	   R   R   t   it   lengtht   arenat   seqt   blockt   startt   stop(    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   _mallocq   s"    !c   	      C   s!  | \ } } } y |  j  | | f } Wn t k
 r9 n X|  j | ƒ \ } } y |  j | | f } Wn t k
 ry n X|  j | ƒ \ } } | | | f } | | } y |  j | j | ƒ Wn4 t k
 rö | g |  j | <t j |  j | ƒ n X| |  j | | f <| |  j  | | f <d  S(   N(	   R&   t   KeyErrort   _absorbR%   R$   R4   R/   t   insortR#   (	   R   R:   R8   R;   R<   t
   prev_blockt   _t
   next_blockR7   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   _free‡   s(    
c         C   s€   | \ } } } |  j  | | f =|  j | | f =| | } |  j | } | j | ƒ | sv |  j | =|  j j | ƒ n  | | f S(   N(   R%   R&   R$   t   removeR#   (   R   R:   R8   R;   R<   R7   R9   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR?   ¥   s    

c         C   sV   xO t  rQ y |  j j ƒ  } Wn t k
 r0 Pn X|  j j | ƒ |  j | ƒ q Wd  S(   N(   t   TrueR*   R5   t
   IndexErrorR(   RE   RD   (   R   R:   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   _free_pending_blocks´   s    	c         C   s€   t  j ƒ  |  j k s t ‚ |  j j t ƒ s@ |  j j | ƒ n< z+ |  j	 ƒ  |  j
 j | ƒ |  j | ƒ Wd  |  j j ƒ  Xd  S(   N(   R   R	   R   R   R!   t   acquiret   FalseR*   R4   RH   R(   RE   RD   t   release(   R   R:   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   free¾   s    

c         C   sÿ   d | k o t  j k  n s% t ‚ t j ƒ  |  j k rG |  j ƒ  n  |  j j ƒ  |  j	 ƒ  zŒ |  j
 t | d ƒ |  j ƒ } |  j | ƒ \ } } } | | } | | k  rÆ |  j | | | f ƒ n  | | | f } |  j j | ƒ | SWd  |  j j ƒ  Xd  S(   Ni    i   (   t   syst   maxintR   R   R	   R   R   R!   RI   RH   R.   R2   t
   _alignmentR=   RD   R(   t   addRK   (   R   R   R8   R;   R<   t   new_stopR:   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   mallocÖ   s    %

(   R   R   RO   R   R3   R   t   staticmethodR.   R=   RD   R?   RH   RL   RR   (    (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   Z   s   				
	c           B   s,   e  Z e ƒ  Z d  „  Z d „  Z d „  Z RS(   c         C   sf   d | k o t  j k  n s% t ‚ t j j | ƒ } | | f |  _ t |  t j j d | f ƒd  S(   Ni    t   args(	   RM   RN   R   R   t   _heapRR   R   R    RL   (   R   R   R:   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   ñ   s    %c         C   sJ   |  j  \ \ } } } } t j | j ƒ \ } } | | k sB t ‚ | | S(   N(   R   t   _multiprocessingt   address_of_bufferR   R   (   R   R8   R;   R<   R   t   addressR7   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   get_address÷   s    c         C   s   |  j  d S(   Ni   (   R   (   R   (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   get_sizeý   s    (   R   R   R   RU   R   RY   RZ   (    (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyR   í   s   			(   R/   R   t   tempfileR   RM   R   R   RV   t   multiprocessing.utilR    R   t   multiprocessing.forkingR   t   __all__t   platformR   t   objectR   R   R   (    (    (    s*   /usr/lib/python2.7/multiprocessing/heap.pyt   <module>#   s    	“