
    bi(                        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 g dZ e	ed      Z
ej                  ej                  fZdd iZe j                  d	k(  rL	 d dlZd dlZ e	ed
      rej)                  dej*                  i       ej)                  dej,                  i        G d de      Z G d de      Z e       Zej8                  Zej:                  Zej<                  Zej>                  Zd Z y# e$ r d dlZY w xY w)    N   )spawn)util)ensure_runningregister
unregisterpthread_sigmasknoopc                       y N r       X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/multiprocess/resource_tracker.py<lambda>r   !   s    r   posix
sem_unlink	semaphoreshared_memoryc                       e Zd Zy)ReentrantCallErrorN)__name__
__module____qualname__r   r   r   r   r   9   s    r   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)ResourceTrackerc                 R    t        j                         | _        d | _        d | _        y r   )	threadingRLock_lock_fd_pidselfs    r   __init__zResourceTracker.__init__?   s    __&
	r   c                     t        d      )Nz8Reentrant call into the multiprocessing resource tracker)r   r"   s    r   _reentrant_call_errorz%ResourceTracker._reentrant_call_errorD   s    
 !FH 	Hr   c                    | j                   5   t        | j                   dt                     dkD  r| j                         cd d d        S | j                  
	 d d d        y t        j                  | j                         d | _        t        j                  | j                  d       d | _        d d d        y # 1 sw Y   y xY w)N_recursion_countr   r   )	r   getattrintr&   r    osclosewaitpidr!   r"   s    r   _stopzResourceTracker._stopL   s    ZZ 	 <wtzz#5s;=A113		 	
 xx	 	 HHTXXDHJJtyy!$DI	 	 	s   3B6
B6 AB66B?c                 :    | j                          | j                  S r   )r   r    r"   s    r   getfdzResourceTracker.getfd]   s    xxr   c                 P   | j                   5   t        | j                   dt                     dkD  r| j                         cddd       S | j                  | j                         r
	 ddd       yt        j                  | j                         	 | j                   t        j                  | j                  d       d| _        d| _        t        j                  d       g }	 |j                  t        j                  j!                                d}t        j$                         \  }}	 |j                  |       t'        j(                         }|gt+        j,                         z   }|d||z  gz  }	 t.        r(t1        j2                  t0        j4                  t6               t+        j8                  |||      }t.        r)t1        j2                  t0        j:                  t6               	 || _        || _        	 t        j                  |       	 ddd       y# t        $ r Y cw xY w# t"        $ r Y  w xY w# t.        r)t1        j2                  t0        j:                  t6               w 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 resource tracker process is running.

        This can be run from any process.  Usually a child process will use
        the resource created by its parent.r(   r   Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z7from multiprocess.resource_tracker import main;main(%d)z-c)r   r)   r*   r&   r    _check_aliver+   r,   r!   r-   ChildProcessErrorwarningswarnappendsysstderrfileno	Exceptionpiper   get_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr	   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCK)r#   fds_to_passcmdrwexeargspids           r   r   zResourceTracker.ensure_runninga   s/   
 ZZ <	;wtzz#5s;=A113<	 <	 xx#$$&<	 <	 " yy,

499a0   	 I J K""3::#4#4#67 LC779DAq""1%**,ut@@BBsQw'U$..v/?/?AQR--c4EC$..v/A/ACST
 	y<	 <	$ )   * %..v/A/ACST %
 y<	 <	s   3J
J0J,H<%J"-H#J)AI'1AH36/I'%J4J	H JH  J#	H0,J/H00J31I$$I''I??JJJJ%c                 d    	 t        j                  | j                  d       y# t        $ r Y yw xY w)z;Check that the pipe has not been closed by sending a probe.s   PROBE:0:noop
TF)r+   writer    OSErrorr"   s    r   r2   zResourceTracker._check_alive   s5    	 HHTXX01   		s    # 	//c                 *    | j                  d||       y)z0Register name of resource with resource tracker.REGISTERN_sendr#   namertypes      r   r   zResourceTracker.register   s    

:tU+r   c                 *    | j                  d||       y)z2Unregister name of resource with resource tracker.
UNREGISTERNrP   rR   s      r   r   zResourceTracker.unregister   s    

<u-r   c                    	 | j                          dj	                  |||      j                  d      }t        |      dkD  rt        d      t        j                  | j                  |      }|t        |      k(  s J dj	                  |t        |                   y # t        $ r t        j                  d| d|d       Y w xY w)	NzSResourceTracker called reentrantly for resource cleanup, which is unsupported. The z object z might leak.z{0}:{1}:{2}
asciii   zmsg too longznbytes {0:n} but len(msg) {1:n})r   r   r4   r5   formatencodelen
ValueErrorr+   rL   r    )r#   rE   rS   rT   msgnbytess         r   rQ   zResourceTracker._send   s    
	<! $$S$6==gFs8c> ^,,$((C(S! 	#D#K#KCH$ 	! " 	<
 MMgXdX\;<	<s   B %CCN)r   r   r   r$   r&   r.   r0   r   r2   r   r   rQ   r   r   r   r   r   =   s2    
H"AF	,.r   r   c                    t        j                   t         j                  t         j                         t        j                   t         j                  t         j                         t        r(t        j
                  t         j                  t               t        j                  t        j                  fD ]  }	 |j                           t        j                         D ci c]  }|t                }}	 t!        | d      5 }|D ]  }	 |j#                         j%                  d      j'                  d      \  }}}t        j)                  |d      }|t+        d| d|       |dk(  r||   j-                  |       n.|dk(  r||   j/                  |       n|d	k(  rnt1        d
|z         	 ddd       |j7                         D ]B  \  }}|r$	 t9        j:                  dt=        |      |fz         |D ]  }	 	 t        |   |        D y# t        $ r Y dw xY wc c}w # t        $ r1 	 t        j2                  t        j4                           n#  Y nxY wY Vw xY w# 1 sw Y   xY w# t        $ r Y w xY w# t        $ r%}	t9        j:                  d|d|	       Y d}	~	d}	~	ww xY w# w xY w# |j7                         D ]  \  }}|r4	 t9        j:                  dt=        |      |fz         n# t        $ r Y nw xY w|D ]I  }	 	 t        |   |       n1# t        $ r%}	t9        j:                  d|d|	       Y d}	~	nd}	~	ww xY wF# w xY w  w xY w)zRun resource tracker.rbrX   :NzCannot register z. for automatic cleanup: unknown resource type rO   rV   PROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: z: )r?   SIGINTSIG_IGNSIGTERMr>   r	   rC   rA   r7   stdinstdoutr,   r:   _CLEANUP_FUNCSkeyssetopenstripdecodesplitgetr\   addremoveRuntimeError
excepthookexc_infoitemsr4   r5   r[   )
fdfrT   cachelinerE   rS   cleanup_funcrtype_cachees
             r   mainr}      s9    MM&--0
MM&..&..1v113CDii$ 	GGI (6':':'<=eUCE\=E=-"d^ 	q '+zz|':':7'C'I'I#'N$Cu#1#5#5eT#BL#+(.tf 555:G=> > j(e((.,e++D1*+Ds+JKK!	2 #(++- 	E;MM #N#&{#3U";#< =
 $ 
N&u-d3 
	?  		 >* ! 7	%	 	> !  % N D!&LMMN % #(++- 	E;MM #N#&{#3U";#< = ! # 
N&u-d3$ N D!&LMMN D
	s  7HH4J.  IB#H *I-J. #I)8I8	HH 	I*$III	IIIII&"J. )	I54I58	J&J!J)!J&&J))J+.M#K,+M,	K8	5M7K8	8MLM	L?L:5M:L??MMMM)!r+   r?   r7   r   r4    r   r   __all__hasattrr>   rc   re   rA   rh   rS   _multiprocess_multiprocessingImportError_posixshmemupdater   
shm_unlinkrr   r   objectr   _resource_trackerr   r   r   r0   r}   r   r   r   <module>r      s"  $ 
  
    
6 12MM6>>2  L 77g 0  .)44
 	 // 
	 	Mf M` $% "11%%))
<[    s   C7 7	DD