
    7Th6                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r  SSKJr  \R                  S:X  a  S SKrS SKrS SKJr  / S	Qr\" \S
5      r\R,                  \R.                  4r\R2                  \ R4                  S.r\ R8                  S:X  a  \\S'   Sr " S S\5      r
\
" 5       r\R>                  r\R@                  r \RB                  r!\RD                  r"\RF                  r#SS jr$S r%g)    N)
sem_unlink)util)ResourceTracker   )spawnwin32)	duplicate)ensure_runningregister
unregisterpthread_sigmask)folderfileposixsemlockFc                   8   ^  \ rS rSrSrS rS rU 4S jrSrU =r	$ )r   J   a  Resource tracker with refcounting scheme.

This class is an extension of the multiprocessing ResourceTracker class
which implements a reference counting scheme to avoid unlinking shared
resources still in use in other processes.

This feature is notably used by `joblib.Parallel` to share temporary
folders and memory mapped files between the main process and the worker
processes.

The actual implementation of the refcounting scheme is in the main
function, which is run in a dedicated process.
c                 H    U R                  5         U R                  SX5        g)z@Decrement the refcount of a resource, and delete it if it hits 0MAYBE_UNLINKN)r
   _send)selfnamertypes      f/var/www/auris/envauris/lib/python3.13/site-packages/joblib/externals/loky/backend/resource_tracker.pymaybe_unlinkResourceTracker.maybe_unlinkY   s    

>4/    c                    U R                      U R                  b  U R                  5       (       a
   SSS5        g[        R                  " U R                  5        [        R
                  S:X  a"   [        R                  " U R                  S5        SU l        SU l        [        R                  " S5        / n UR                  [        R                  R                  5       5        [        R                   " 5       u  p#[        R"                  S:X  a6  [%        [&        R(                  " U5      SS9n[        R                  " U5        UnS[*        R,                   S	U S
[.         S3n UR                  U5        [0        R2                  " 5       nU/[4        R6                  " 5       QSPUPn[4        R8                  " SU 35         [:        (       a)  [<        R>                  " [<        R@                  [B        5        [E        XgU5      n[:        (       a)  [<        R>                  " [<        RF                  [B        5        X0l        Xl         [        R"                  S:X  a  [J        RL                  " U5        O[        R                  " U5         SSS5        g! [         a     GN	f = f! [         a     GNf = f! [:        (       a*  [<        R>                  " [<        RF                  [B        5        f f = f! [H         a    [        R                  " U5        e f = f! [        R"                  S:X  a  [J        RL                  " U5        f [        R                  " U5        f = f! , (       d  f       g= f)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.Nr   r   z^resource_tracker: process died unexpectedly, relaunching.  Some folders/sempahores might leak.r   T)inheritablezfrom z import main; main(z, )z-czlaunching resource tracker: )'_lock_fd_check_aliveoscloser   waitpid_pidOSErrorwarningswarnappendsysstderrfileno	Exceptionpipeplatformr	   msvcrtget_osfhandlemain
__module__VERBOSEr   get_executabler   _args_from_interpreter_flagsdebug_HAVE_SIGMASKsignalr   	SIG_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCKBaseException_winapiCloseHandle)	r   fds_to_passrw_rcmdexeargspids	            r   r
   ResourceTracker.ensure_running^   s   
 ZZxx#$$&& Z "77g% 

499a0
   	 K""3::#4#4#67 779DA||w&v33A6DI$//**=aS7)1MC! ""1%**,Md??AM4MM

9$@A
$}..",,.> )K@C$}.."..0@ 	<<7*''*HHQKS Z #     : %}.."..0@ % !  <<7*''*HHQKS Zs   $M4M/!J&M7-J$A?M$AK( A J. 4K(4LAM
JMJM
J+'M*J++M.7K%%K(("L

LAMM
M!c                 p   > [        [        S5      (       d  g  [        TU ]  5         g ! [         a     g f = f)N__del__)hasattrr   superrM   ChildProcessError)r   	__class__s    r   rM   ResourceTracker.__del__   s6     	22	GO  		s   ( 
55)r"   r'   )
__name__r5   __qualname____firstlineno____doc__r   r
   rM   __static_attributes____classcell__)rQ   s   @r   r   r   J   s    0
N `	 	r   r   c                 D	  ^ T(       a"  [         R                  " [         R                  S9  [        R                  " [        R                  [        R
                  5        [        R                  " [        R                  [        R
                  5        [        (       a)  [        R                  " [        R                  [        5        [        R                  [        R                  4 H  n UR                  5         M     T(       a  [         R                   " S5        ["        R%                  5        Vs0 s H  o30 _M     nn [        R&                  S:X  a%  [(        R*                  " U [,        R.                  5      n [1        U S5       n UR3                  5       nUS:X  a  GO UR5                  5       R7                  S5      R9                  S5      nUS   SR;                  US	S
 5      US
   p8nUS:X  a  Mm  U["        ;  a/  [=        SU SU S[?        ["        R%                  5       5       35      eUS:X  aL  XU   ;  a  S	XC   U'   OXC   U==   S	-  ss'   T(       a%  [         R                   " SU SU SXC   U    S35        OUS:X  a6  XC   U	 T(       a)  [         R                   " SU SU S[A        U5       S35        OUS:X  a}  XC   U==   S	-  ss'   T(       a%  [         R                   " SU SU SXC   U    S35        XC   U   S:X  a6  XC   U	  T(       a  [         R                   " SU 35        ["        U   " U5        OO[G        SU< 35      eGM  SSS5        U4S jn
URO                  5        H  u  p;US:X  a  M  U
" X5        M     SU;   a  U
" US   S5        T(       a  [         R                   " S 5        gg! [         a     GM  f = fs  snf ! [         a'  n	[B        RD                  " SU SU	< 35         Sn	A	NSn	A	ff = f! [H         a;     [        RJ                  " [        RL                  " 5       6    N! [H         a      Nf = ff = f! , (       d  f       GN= f! U4S jn
URO                  5        H  u  p;US:X  a  M  U
" X5        M     SU;   a  U
" US   S5        f f = f)!zRun resource tracker.)levelz Main resource tracker is runningr   rbr   ascii:r   r   PROBEzCannot register z/ for automatic cleanup: unknown resource type (z1). Resource type should be one of the following: REGISTERz*[ResourceTracker] incremented refcount of  z
 (current r    
UNREGISTERz[ResourceTracker] unregister z: registry(r   z*[ResourceTracker] decremented refcount of [ResourceTracker] unlink resource_tracker: : Nzunrecognized command c                 b  > U (       a'   [         R                  " S[        U 5       SU S35        U  H5  n [        U   " U5        T(       a  [
        R                  " SU 35        M5  M7     g ! [         a     NHf = f! [         a(  n[         R                  " SU SU< 35         S nAMw  S nAff = f)Nz%resource_tracker: There appear to be z leaked z  objects to clean up at shutdownrc   rd   re   )r)   r*   lenr/   _CLEANUP_FUNCSr   r9   )rtype_registryr   r   everboses       r   _unlink_resourcesmain.<locals>._unlink_resources(  s    MM?~./xw ?// 'F"5)$/

%>tf#EF  ' !  ! FMM$6tfBqe"DEEFs(   &A, /A<,
A98A9<
B.B))B.r   zresource tracker shut down)(r   log_to_stderrDEBUGr;   SIGINTSIG_IGNSIGTERMr:   r   r?   r=   r,   stdinstdoutr%   r/   r9   rh   keysr1   r2   open_osfhandler$   O_RDONLYopenreadlinestripdecodesplitjoin
ValueErrorlistrg   r)   r*   RuntimeErrorr@   
excepthookexc_infoitems)fdrk   fr   registrylinesplittedrG   r   rj   rl   ri   s    `          r   r4   r4      sR    ,
MM&--0
MM&..&..1}v113CDii$	GGI % 

56'5':':'<='<er	'<H=r<<<7"&&r2;;7B"d^qzz|3;D#zz|227;AA#FH !!B0   %C g~ N2(.tf 566;W =?#N$7$7$9:;=  j(645HOD1$OD1Q61" JJ L#('4& 1,,4OD,A+B!!E
 ,$OD1" JJ"?vQug N,,/M?!!= . -2-" JJ L#('4& 1,,4OD,A+B!!E $?40A5 ( 5	"#*$(JJ*CD6(J%& !/u 5d ; 6 +-B3'+JKKG  X	F* &.^^%5!E !.8	 &6 xhx0(;

/0 w  		 >F $- " (&8b$F!" !"" % 7( K ^X	F* &.^^%5!E !.8	 &6 xhx0(;  s   )N60O?AQ Q	AP0Q	2B
P<Q	=;P8Q	9AP/O:Q	<PQ	Q 6
OO
O>O94P8Q	9O>>P
Q&P42Q	4
Q>Q?Q	QQQ		
QQ ARc                    [         R                  S:w  aH  U Vs/ s H  o3R                  S5      PM     nnU R                  S5      n [        R                  " XU5      $ [        U5      nSR                  S U 5       5      n [        R                  " XS S SSS S S 5	      u  pVpu[        R                  " U5        U$ s  snf ! [         a     W$ f = f)Nr   zutf-8ra   c              3   .   #    U  H  nS U S 3v   M     g7f)"N ).0xs     r   	<genexpr>!spawnv_passfds.<locals>.<genexpr>W  s     .A1#Qxs   Tr   )r,   r1   encoder   r>   sortedr}   rA   CreateProcessrB   r@   )pathrI   passfdsargrG   _htrJ   s           r   r>   r>   P  s    
||w/34t

7#t4{{7#""4w77/hh...	#114tQdDMA3 # 
 5  	
	s   B96B> >
CC)r   )&r$   shutilr,   r;   r)   _multiprocessingr   multiprocessingr    multiprocessing.resource_trackerr   _ResourceTracker r   r1   rA   r2   multiprocessing.reductionr	   __all__rN   r:   rp   rr   r=   rmtreeunlinkrh   r   r6   _resource_trackerr
   r   r   r   getfdr4   r>   r   r   r   <module>r      s   R 
  
   '   <<73 7 12MM6>>2 "MM299=77g *N9 m& m` $% "11%% --))
K1\r   