
    Ih                         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 g dZ G d d	      Z e       Zej                   Zej"                  Zej$                  Zej&                  Zd
 Zy)    N   )	_billiard)spawn)util)spawnv_passfds)ensure_runningregister
unregisterc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)SemaphoreTrackerc                 D    t        j                         | _        d | _        y N)	threadingLock_lock_fdselfs    S/var/www/html/planif/env/lib/python3.12/site-packages/billiard/semaphore_tracker.py__init__zSemaphoreTracker.__init__    s    ^^%
    c                 :    | j                          | j                  S r   )r   r   r   s    r   getfdzSemaphoreTracker.getfd$   s    xxr   c                 r   | j                   5  | j                  
	 ddd       yg }	 |j                  t        j                  j                                d}t        j                         \  }}	 |j                  |       t        j                         }|gt        j                         z   }|d||z  gz  }t        |||       || _        	 t        j                  |       	 ddd       y# t        $ r Y w xY w#  t        j                  |        xY w# t        j                  |       w xY w# 1 sw Y   yxY w)zMake sure that semaphore tracker process is running.

        This can be run from any process.  Usually a child process will use
        the semaphore created by its parent.Nz4from billiard.semaphore_tracker import main;main(%d)z-c)r   r   appendsysstderrfileno	Exceptionospiper   get_executabler   _args_from_interpreter_flagsr   close)r   fds_to_passcmdrwexeargss          r   r   zSemaphoreTracker.ensure_running(   s   
 ZZ 	xx#	 	 K""3::#4#4#67 IC779DAq""1%**,ut@@BBsQw'sD+6
 /	 	   /	 	s^   D-D--C)D-.AC8D
D-)	C52D-4C55D-8DDD**D--D6c                 (    | j                  d|       y)z2Register name of semaphore with semaphore tracker.REGISTERN_sendr   names     r   r	   zSemaphoreTracker.registerF   s    

:t$r   c                 (    | j                  d|       y)z4Unregister name of semaphore with semaphore tracker.
UNREGISTERNr-   r/   s     r   r
   zSemaphoreTracker.unregisterJ   s    

<&r   c                     | j                          dj                  ||      j                  d      }t        |      dkD  rt	        d      t        j                  | j                  |      }|t        |      k(  sJ y )Nz{0}:{1}
asciii   zname too long)r   formatencodelen
ValueErrorr    writer   )r   r&   r0   msgnbytess        r   r.   zSemaphoreTracker._sendN   si      d+227;t9s? _--$((C(S!!!r   N)	__name__
__module____qualname__r   r   r   r	   r
   r.    r   r   r   r      s     <%'"r   r   c           
      z   t        j                   t         j                  t         j                         t        j                   t         j                  t         j                         t        j
                  t        j                  fD ]  }	 |j                           t               }	 t        j                  | d      5 }|D ]a  }	 |j                         j                  d      \  }}|dk(  r|j                  |       n%|dk(  r|j                  |       nt!        d|z        c 	 ddd       |r"	 t'        j(                  dt+        |      z         |D ]*  }	 |j-                  d      }	 t/        j0                  |       , y# t        $ r Y w xY w# t        $ r1 	 t	        j"                  t	        j$                           n#  Y nxY wY 
w xY w# 1 sw Y   xY w# t        $ r Y w xY w# t        $ r%}t'        j(                  d	|d
|       Y d}~d}~ww xY w# w xY w# |r2	 t'        j(                  dt+        |      z         n# t        $ r Y nw xY w|D ]a  }	 |j-                  d      }	 t/        j0                  |       n1# t        $ r%}t'        j(                  d	|d
|       Y d}~nd}~ww xY w^# w xY w w xY w)zRun semaphore tracker.rb   :s   REGISTERs
   UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr4   zsemaphore_tracker: z: )signalSIGINTSIG_IGNSIGTERMr   stdinstdoutr$   r   setioopenstripsplitaddremoveRuntimeError
excepthookexc_infowarningswarnr7   decoder   
sem_unlink)fdfcacheliner&   r0   es          r   mainr\   `   s    MM&--0
MM&..&..1ii$ 	GGI EE%WWR 	!  $

 2 24 8ICk)		$-T**+Ds+JKK	"  J!%j) *
  	D{{7+K((. 	=  		  ! 7		 	,   ! KMMq"IJJK %  J!%j) *   	D{{7+K((.  KMMq"IJJK 	s  	F &H <GAF!G$H /!G H(G( 	FF	G
$F?>G
?G	G
G	G

GGH 	G%$G%(	H1HHHHHJ:"!IJ:	IJ:IJ:J3+J J3	J/	
J*	%J3*J/	/J32J:3J5	5J:)rJ   r    rC   r   r   rS   _extr    r   r   compatr   __all__r   _semaphore_trackerr   r	   r
   r   r\   r?   r   r   <module>rb      sq    
 	  
      "
68" 8"v &' #22&&**
  2r   