Ë
    òT•j\(  ã                   óì  — 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(  rKd 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j4                  Zej6                  Zej8                  Zej:                  Zd„ Zy)é    Né   )Úspawn)Úutil)Úensure_runningÚregisterÚ
unregisterÚpthread_sigmaskÚnoopc                   ó   — y ©N© r   ó    ú7/usr/lib/python3.12/multiprocessing/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   6   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_errorA   s   € ô
 !ØFóHð 	Hr   c                 óx  — | j                   5  | j                   j                  «       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)Nr   r   )r   Ú_recursion_countr&   r    ÚosÚcloseÚwaitpidr!   r"   s    r   Ú_stopzResourceTracker._stopI   s–   € Ø�Z‰Zñ 	ð �z‰z×*Ñ*Ó,¨qÒ0Ø×1Ñ1Ó3÷		ñ 	ð
 �x‰xÐà÷	ð 	ô �H‰H�T—X‘XÔØˆDŒHä�J‰J�t—y‘y !Ô$ØˆDŒI÷	÷ 	ñ 	ús   �-B0ÁB0ÁAB0Â0B9c                 ó:   — | j                  «        | j                  S r   )r   r    r"   s    r   ÚgetfdzResourceTracker.getfdZ   s   € Ø×ÑÔØ�x‰xˆr   c                 óD  — | j                   5  | j                   j                  «       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(t/        j0                  t.        j2                  t4        «       t)        j6                  |||«      }t,        r)t/        j0                  t.        j8                  t4        «       	 || _        || _        	 t        j                  |«       	 ddd«       y# t        $ r Y �Œcw xY w# t         $ r Y �Œ w xY w# t,        r)t/        j0                  t.        j8                  t4        «       w w xY w#  t        j                  |«       ‚ xY w# t        j                  |«       w xY w# 1 sw Y   yxY w)z¬Make 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   Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.resource_tracker import main;main(%d)z-c)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_running^   s)  € ð
 �Z‰Zñ <	Ø�z‰z×*Ñ*Ó,¨qÒ0à×1Ñ1Ó3÷<	ñ <	ð �x‰xÐ#à×$Ñ$Ô&à÷<	ð <	ô —‘˜Ÿ™Ô"ðð —y‘yÐ,ÜŸ
™
 4§9¡9¨aÔ0ð  �”Ø �”	ä—‘ð Iô Jð ˆKðØ×"Ñ"¤3§:¡:×#4Ñ#4Ó#6Ô7ð OˆCÜ—7‘7“9‰DˆAˆqðØ×"Ñ" 1Ô%ä×*Ñ*Ó,�Ø�uœt×@Ñ@ÓBÑB�Ø˜˜s Q™w˜Ñ'�ðUÝ$Ü×.Ñ.¬v×/?Ñ/?ÔAQÔRÜ×-Ñ-¨c°4¸ÓE�Cå$Ü×.Ñ.¬v×/AÑ/AÔCSÕTð
 �”Ø�•	ä—‘˜•÷y<	ð <	øô$ )ò âðûô ò Úðûõ* %Ü×.Ñ.¬v×/AÑ/AÔCSÕTð %ûðÜ—‘˜”Øûô
 —‘˜•ú÷y<	ð <	ús£   �-JÁJÁ*JÂ
,HÂ6%JÃ-HÄ	JÄ#AI!Å+AH-Æ0/I!ÇI<Ç.JÈ	HÈJÈHÈJÈ	H*È&JÈ)H*È*JÈ-1IÉI!É!I9É9I<É<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   r0   zResourceTracker._check_alive¡   s5   € ð	ô �H‰H�T—X‘XÐ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   € à�
‰
�:˜t UÕ+r   c                 ó*   — | j                  d||«       y)z2Unregister name of resource with resource tracker.Ú
UNREGISTERNrN   rP   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   r2   r3   ÚformatÚencodeÚlenÚ
ValueErrorr)   rJ   r    )r#   rC   rQ   rR   ÚmsgÚnbytess         r   rO   zResourceTracker._send´   sÆ   € ð
	<Ø×ÑÔ!ð ×$Ñ$ S¨$°Ó6×=Ñ=¸gÓFˆÜˆs‹8�cŠ>ô ˜^Ó,Ð,Ü—‘˜$Ÿ(™( CÓ(ˆØœ˜S›Ò!ð 	Ð#D×#KÑ#KØ”C˜“Hó$ó 	Ñ!øô "ò 	<ô
 �M‰Mðà�g˜X d X¨\ð;ö<ð	<ús   ‚B Â%CÃCN)r   r   r   r$   r&   r,   r.   r   r0   r   r   rO   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.ÚrbrV   ú:NzCannot register z. for automatic cleanup: unknown resource type rM   rT   Ú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	   rA   r?   r5   ÚstdinÚstdoutr*   r8   Ú_CLEANUP_FUNCSÚkeysÚsetÚopenÚstripÚdecodeÚsplitÚgetrZ   ÚaddÚremoveÚRuntimeErrorÚ
excepthookÚexc_infoÚitemsr2   r3   rY   )
ÚfdÚfrR   ÚcacheÚlinerC   rQ   Úcleanup_funcÚrtype_cacheÚes
             r   Úmainr{   Ñ   s9  € ô ‡M�M”&—-‘-¤§¡Ô0Ü
‡M�M”&—.‘.¤&§.¡.Ô1ÝÜ×Ñœv×1Ñ1Ô3CÔDä�i‰iœŸ™Ð$ò ˆð	Ø�G‰G�Iðô (6×':Ñ':Ó'<Ö=˜eˆU”C“E‰\Ð=€EÐ=ð-ä�"�d‹^ð 	˜qØò �ðØ'+§z¡z£|×':Ñ':¸7Ó'C×'IÑ'IÈ#Ó'NÑ$�C˜˜uÜ#1×#5Ñ#5°e¸TÓ#B�LØ#Ð+Ü(Ø.¨t¨fð 55Ø5:°Gð=ó>ð >ð ˜jÒ(Ø˜e™×(Ñ(¨Õ.Ø Ò,Ø˜e™×+Ñ+¨DÕ1Ø šØä*Ð+DÀsÑ+JÓKÐKøñ!÷	ð2 #(§+¡+£-ò 	ÑˆE�;ÙðÜ—M‘Mð #Nä#& {Ó#3°UÐ";ñ#<ô =ð
 $ò 
�ððNÜ& uÑ-¨dÔ3ð ñ
ñ	øô? ò 	Úð	üò >øô* !ò ðÜŸ™¬¯©«Ò7øðÙýð	ú÷%	ð 	ûô> !ò Ùðûô %ò NÜ ŸšÂDÉ!Ð&L×MÑMûðNûð ûð% #(§+¡+£-ò 	ÑˆE�;ÙðÜ—M‘Mð #Nä#& {Ó#3°UÐ";ñ#<õ =øô !ò Ùðúà#ò 
�ðð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=   r5   r   r2   Ú r   r   Ú__all__Úhasattrr<   ra   rc   r?   rf   rQ   Ú_multiprocessingÚ_posixshmemÚupdater   Ú
shm_unlinkrp   r   Úobjectr   Ú_resource_trackerr   r   r   r.   r{   r   r   r   ú<module>r…      s  ðó$ 
Û Û 
Û Û å Ý â
6€á˜Ð 1Ó2€Ø—M‘M 6§>¡>Ð2Ð ð ‰Lð€ð ‡7�7ˆgÒÛÛñ Ð Ô.Ø×ÑØÐ)×4Ñ4ð
ô 	ð ×ÑØ˜×/Ñ/ðô ô
	˜ô 	ôM�fô Mñ` $Ó%Ð Ø"×1Ñ1€Ø×%Ñ%€Ø×)Ñ)€
Ø×Ñ€ó<r   