
    ⾙hZ                      j   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 ddlmZ ddlmZ dd	lmZ g d
ZdZ ej&                  d      Z G d d      ZddZd Zd Zd Zd Z e       Zej8                  Zej:                  Zej<                  Zej>                  Zy)    N   )
connection)process)	reduction)semaphore_tracker)spawn)util)spawnv_passfds)ensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preload   Qc                   *    e Zd Zd Zd Zd Zd Zd Zy)
ForkServerc                 p    d | _         d | _        d | _        t        j                         | _        dg| _        y )N__main__)_forkserver_address_forkserver_alive_fd_inherited_fds	threadingLock_lock_preload_modulesselfs    O/var/www/Befach/backend/env/lib/python3.12/site-packages/billiard/forkserver.py__init__zForkServer.__init__$   s2    #' $(!"^^%
!+    c                 `    t        d | j                  D              st        d      || _        y)z>Set list of module names to try to load in forkserver process.c              3   >   K   | ]  }t        |      t        u   y wN)typestr).0mods     r   	<genexpr>z4ForkServer.set_forkserver_preload.<locals>.<genexpr>-   s     E49#Es   z&module_names must be a list of stringsN)allr   	TypeError)r   modules_namess     r   r   z!ForkServer.set_forkserver_preload+   s*    Et/D/DEEDEE -r    c                     | j                   S )zReturn list of fds inherited from parent process.

        This returns None if the current process was not started by fork
        server.
        )r   r   s    r   r   zForkServer.get_inherited_fds1   s     """r    c                    | j                          t        |      dz   t        k\  rt        d      t	        j                  t        j
                        5 }|j                  | j                         t        j                         \  }}t        j                         \  }}||| j                  t        j                         g}||z  }	 t        j                  ||       ||ft        j                  |       t        j                  |       cddd       S #  t        j                  |       t        j                  |        xY w# t        j                  |       t        j                  |       w xY w# 1 sw Y   yxY w)a;  Request forkserver to create a child process.

        Returns a pair of fds (status_r, data_w).  The calling process can read
        the child process's pid and (eventually) its returncode from status_r.
        The calling process should write to data_w the pickled preparation and
        process data.
           ztoo many fdsN)r   lenMAXFDS_TO_SEND
ValueErrorsocketAF_UNIXconnectr   ospiper   r   getfdr   sendfdsclose)r   fdsclientparent_rchild_wchild_rparent_wallfdss           r   r   z!ForkServer.connect_to_new_process9   s$    	s8a<>)^,,]]6>>* 	"fNN4334 "	Hg "	GXw(A(A'--/1FcMF	"!!&&1) !!!	" 	"""!!!	" 	"s1   A1E2D*E2-E  E,E//E22E;c                    | j                   5  t        j                          | j                  
	 ddd       yd}| j                  rBddh}t        j                  d      }|j                         D ci c]  \  }}||v s|| }}}ni }t        j                  t        j                        5 }t        j                  d      }|j                  |       t        j                  |d       |j                          t        j                          \  }}		 |j#                         |g}
||j#                         || j                  |fz  }t        j$                         }|gt'        j(                         z   }|d|gz  }t+        |||
       	 t        j,                  |       || _        |	| _        ddd       ddd       yc c}}w #  t        j,                  |	        xY w# t        j,                  |       w xY w# 1 sw Y   MxY w# 1 sw Y   yxY w)	zMake sure that a fork server is running.

        This can be called from any process.  Note that usually a child
        process will just reuse the forkserver started by its parent, so
        ensure_running() will do nothing.
        Nz<from billiard.forkserver import main; main(%d, %d, %r, **%r)	main_pathsys_pathignorer3   i  z-c)r   r   r   r   r   r   get_preparation_dataitemsr2   r3   r   arbitrary_addressbindr5   chmodlistenr6   filenoget_executabler	   _args_from_interpreter_flagsr
   r9   r   )r   cmddesired_keysdataxylisteneraddressalive_ralive_wfds_to_passexeargss                r   r   zForkServer.ensure_runningV   s    ZZ (	4,,.((4(	4 (	4
,C $$ +Z811(;'+zz|#aqL7HAqD  v~~. 4($66yAg&%(! $&779 &#+??#4g">KHOO-w8M8M " "C..0C54#D#D#FFDT3K'D"3k:
 HHW%+2(,3)/4#(	4 (	4.HHW%HHW%+4 4#(	4 (	4sf   "H:H2F:?F:)H-A$G5A3G #G5)H:H GGG22G55G>	:HH
N)__name__
__module____qualname__r   r   r   r   r    r    r   r   r   "   s    -.#":/4r    r   c           	      ~   |r\d|v rE|Cdt        j                         _        	 t        j                  |       t        j                         `|D ]  }	 t        |        t        j                  A	 t        j                  j                          t        t        j                        t        _        t        j                  t        j                   t        j"                        }t%        j$                  t$        j&                  |       5 }t)        j*                         5 }|j-                         t.        _        |j3                  |t(        j4                         |j3                  |t(        j4                         	 	 	 |j7                         D 	
cg c]  \  }	}
|	j8                   }}	}
|rn0||v r!t        j:                  |d      dk(  sJ t<        ||v sJ |j?                         d   5 }d}t        j@                         dk(  r$	 tC        ||||       t        jN                  |       ddd       # t        j                         `w xY w# t        $ r Y w xY w# t        t        f$ r Y w xY wc c}
}	w # tD        $ rE t        jF                  t        jH                           t        jJ                  jM                          Y w xY w# t        jN                  |       w xY w# 1 sw Y   xY w# t        $ r(}|jP                  tP        jR                  k7  r Y d}~d}~ww xY w# 1 sw Y   nxY wddd       y# 1 sw Y   yxY w)zRun forkserver.r   NT)rK   r   r    r   )*r   current_process_inheritingr   import_main_path
__import__ImportErrorsysstdinr9   openr5   devnullOSErrorr1   signalSIGCHLDSIG_IGNr2   r3   	selectorsDefaultSelectorgetsockname_forkserverr   register
EVENT_READselectfileobjread
SystemExitacceptfork
_serve_one	Exception
excepthookexc_infostderrflush_exiterrnoECONNABORTED)listener_fdrU   preloadrB   rC   modnamehandlerrS   selectorkeyeventsrfdsscodees                  r   mainr      s    Y%:48G##%1:&&y1++-9G7#  yy	IIOORZZ(CI
 mmFNNFNN;G	v~~k	: h%%'+3*2*>*>*@'(I$8$89'9#7#78=E__=NOMS&CKKODO 
 d?777A.#555$$4'''__&q) 	+QDwwyA~+&q(GWE
 HHTN	+ / ++-9   $ 		 P  ) /NNCLLN;JJ,,./ HHTN	+ 	+  77e000 1;    s   H. I0A I L3AL8K*I-
"AK*'KI3K%K*-L.I	III*)I*-K*3AK	>K K	KK	KK'#K**	L3LLLLL'	#L33L<c                     | ||||fS r#   r]   )r>   r=   alivestfd	inheriteds        r   __unpack_fdsr      s    GUD)33r    c                 L   |j                          t        j                   |       t        j                  t        j                  |       t	        j
                  | t        dz         }| j                          t        |      t        k  sJ t        | \  }}t        _
        }t        _        |t        j                  _        t        |t        j                                 dt"        j$                  v rdd l}|j)                          t+        j,                  |      }	t        ||	       y )Nr   randomr   )r9   r5   ri   rj   r   recvfdsr0   r/   r   ro   r   r   r   _semaphore_tracker_fdwrite_unsignedgetpidrd   modulesr   seedr   _main)
r   rS   rU   r   r:   r>   r=   r   r   r   s
             r   rx   rx      s    NNHHW
MM&..'* 

A~1
2CGGIs8~%%% *6s);'Wg{7	;%/3((, 7BIIK( 3;; ;;wD 7D!r    c                     d}t         j                  }t        |      |k  rCt        j                  | |t        |      z
        }|st        d      ||z  }t        |      |k  rCt         j                  |      d   S )Nr    zunexpected EOFr   )UNSIGNED_STRUCTsizer/   r5   rt   EOFErrorunpack)fdrP   lengthr   s       r   read_unsignedr      su    D!!F
d)f
GGBT*++,,		 d)f

 !!$'**r    c                     t         j                  |      }|r/t        j                  | |      }|dk(  rt	        d      ||d  }|r.y y )Nr   zshould not get here)r   packr5   writeRuntimeError)r   nmsgnbytess       r   r   r      sH    


q
!C
"c"Q;455&'l	 r    )NN) r   r5   rl   ri   r2   structrd   r    r   r   r   r   r   r	   compatr
   __all__r0   Structr   r   r   r   rx   r   r   ro   r   r   r   r   r]   r    r   <module>r      s     	     
        "% &--$c4 c4T8v4"D+ l++11 $;; $;; r    