ó
i4Vdc           @   s8   d  Z  d d l Z d d l Z d e f d „  ƒ  YZ d S(   s   
Synchronization primitives:

    - reader-writer lock (preference to writers)

(Contributed to Django by eugene@lazutkin.com)
iÿÿÿÿNt   RWLockc           B   s_   e  Z d  Z d „  Z d „  Z d „  Z e j d „  ƒ Z d „  Z	 d „  Z
 e j d „  ƒ Z RS(   s(  
    Classic implementation of reader-writer lock with preference to writers.

    Readers can access a resource simultaneously.
    Writers get an exclusive access.

    API is self-descriptive:
        reader_enters()
        reader_leaves()
        writer_enters()
        writer_leaves()
    c         C   s[   t  j ƒ  |  _ t  j d ƒ |  _ t  j d ƒ |  _ d |  _ d |  _ d |  _ d |  _	 d  S(   Ni    (
   t	   threadingt   RLockt   mutext	   Semaphoret   can_readt	   can_writet   active_readerst   active_writerst   waiting_readerst   waiting_writers(   t   self(    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   __init__   s    			c         C   sm   |  j  Q |  j d k rG |  j d k rG |  j d 7_ |  j j ƒ  n |  j d 7_ Wd  QX|  j j ƒ  d  S(   Ni    i   (   R   R   R
   R   R   t   releaseR	   t   acquire(   R   (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   reader_enters#   s    
c         C   so   |  j  ` |  j d 8_ |  j d k re |  j d k re |  j d 7_ |  j d 8_ |  j j ƒ  n  Wd  QXd  S(   Ni   i    (   R   R   R
   R   R   R   (   R   (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   reader_leaves,   s    
c         c   s%   |  j  ƒ  z	 d  VWd  |  j ƒ  Xd  S(   N(   R   R   (   R   (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   reader4   s    
	c         C   s|   |  j  ` |  j d k rV |  j d k rV |  j d k rV |  j d 7_ |  j j ƒ  n |  j d 7_ Wd  QX|  j j ƒ  d  S(   Ni    i   (   R   R   R
   R   R   R   R   (   R   (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   writer_enters<   s    
-c         C   s½   |  j  ® |  j d 8_ |  j d k rV |  j d 7_ |  j d 8_ |  j j ƒ  n] |  j d k r³ |  j } d |  _ |  j | 7_ x* | d k r¯ |  j j ƒ  | d 8} q‰ Wn  Wd  QXd  S(   Ni   i    (   R   R   R
   R   R   R	   R   R   (   R   t   t(    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   writer_leavesE   s    
		c         c   s%   |  j  ƒ  z	 d  VWd  |  j ƒ  Xd  S(   N(   R   R   (   R   (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   writerT   s    
	(   t   __name__t
   __module__t   __doc__R   R   R   t
   contextlibt   contextmanagerR   R   R   R   (    (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyR       s   								(   R   R   R   t   objectR    (    (    (    s`   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/django/utils/synch.pyt   <module>   s   