ó
    •JÕi�;  ã                   ó"  • S SK r 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rSSK	J
r
  SSK	Jr  / SQr\" \S5      r\R                  \R                   4rS r\S	 S
.r\R(                  S:X  aP  S SKrS SKr\" \S5      (       a  \R/                  S\R0                  05        \R/                  S\R2                  05         " S S\5      r " S S\5      r\" 5       r\R>                  r\R@                  r \RB                  r!\RD                  r"S r#S r$g)é    N)Údequeé   )Úspawn)Úutil)Úensure_runningÚregisterÚ
unregisterÚpthread_sigmaskc                 ó   • [        S5      e)Nz-noop should never be registered or cleaned up)ÚRuntimeError©Únames    Ú'Lib\multiprocessing\resource_tracker.pyÚcleanup_noopr   $   s   € Ü
ÐFÓ
GÐGó    c                 ó   • g ©N© r   s    r   Ú<lambda>r   )   s   € ˜$r   )ÚnoopÚdummyÚposixÚ
sem_unlinkÚ	semaphoreÚshared_memoryc                   ó   • \ rS rSrSrg)ÚReentrantCallErroré>   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   r   r   r   r   >   s   † Úr   r   c                   óÂ   • \ rS rSrS rS rS rSS jr\R                  \R                  \R                  4S jrS rS rS	 rS
 rS rSS jrS rS rS rS rS rSrg)ÚResourceTrackeréB   c                 óŽ   • [         R                  " 5       U l        S U l        S U l        S U l        [        5       U l        SU l        g )NT)	Ú	threadingÚRLockÚ_lockÚ_fdÚ_pidÚ	_exitcoder   Ú_reentrant_messagesÚ_use_simple_format©Úselfs    r   Ú__init__ÚResourceTracker.__init__D   s9   € Ü—_’_Ó&ˆŒ
ØˆŒØˆŒ	ØˆŒÜ#(£7ˆÔ ð #'ˆÕr   c                 ó   • [        S5      e)Nz8Reentrant call into the multiprocessing resource tracker)r   r0   s    r   Ú_reentrant_call_errorÚ%ResourceTracker._reentrant_call_errorR   s   € ô
 !ØFóHð 	Hr   c                 ó"   • U R                  SS9  g )NF)Úuse_blocking_lock)Ú_stopr0   s    r   Ú__del__ÚResourceTracker.__del__Z   s   € ð 	�
‰
 Uˆ
Ò+r   c                 óf  • U(       a&  U R                      U R                  5         S S S 5        g U R                   R                  SS9n U R                  5         U(       a  U R                   R                  5         g g ! , (       d  f       g = f! U(       a  U R                   R                  5         f f = f)NF)Úblocking)r*   Ú_stop_lockedÚacquireÚrelease)r1   r8   Úacquireds      r   r9   ÚResourceTracker._stop`   s„   € ÞØ—“Ø×!Ñ!Ô#÷ �ð —z‘z×)Ñ)°5Ð)Ð9ˆHð)Ø×!Ñ!Ô#æØ—J‘J×&Ñ&Õ(ð ÷ •ûö Ø—J‘J×&Ñ&Õ(ð ús   ”A;ÁB Á;
B	Â$B0c                 óŠ  • U R                   R                  5       S:”  a  U R                  5       eU R                  c  g U R                  c  g U" U R                  5        S U l         U" U R                  S5      u  pES U l         U" U5      U l        g ! [
         a    S U l        S U l         g f = f! [         a
    S U l         g f = f)Nr   r   )r*   Ú_recursion_countr5   r+   r,   ÚChildProcessErrorr-   Ú
ValueError)r1   ÚcloseÚwaitpidÚwaitstatus_to_exitcodeÚ_Ústatuss         r   r>   ÚResourceTracker._stop_lockedl   sÀ   € ð �:‰:×&Ñ&Ó(¨1Ó,Ø×,Ñ,Ó.Ð.Ø�8‰8ÑàØ�9‰9ÑØñ 	ˆd�h‰hŒØˆŒð	Ù §	¡	¨1Ó-‰IˆAð ˆŒ	ð	"Ù3°FÓ;ˆD�Nøô !ó 	ØˆDŒIØ!ˆDŒNÙð	ûô ó 	"à!ˆDŽNð	"ús$   Á%B ÂB. ÂB+Â*B+Â.CÃCc                 ó:   • U R                  5         U R                  $ r   )r   r+   r0   s    r   ÚgetfdÚResourceTracker.getfd�   s   € Ø×ÑÔØ�x‰xˆr   c                 ó"   • U R                  5       $ )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.)Ú_ensure_running_and_writer0   s    r   r   ÚResourceTracker.ensure_running“   s   € ð
 ×-Ñ-Ó/Ð/r   c                 ó  • [         R                  " U R                  5         U R                  b!  [         R                  " U R                  S5        S U l        S U l        S U l        [        R                  " S5        g ! [
         a     N8f = f)Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.)	ÚosrG   r+   r,   rH   rE   r-   ÚwarningsÚwarnr0   s    r   Ú_teardown_dead_processÚ&ResourceTracker._teardown_dead_processš   ss   € Ü
�Š�—‘Ôð	ð �y‰yÑ$Ü—
’
˜4Ÿ9™9 aÔ(ð ˆŒØˆŒ	ØˆŒä�Šð Aõ 	Bøô !ó 	áð	ús   ¢.A< Á<
B	ÂB	c                 ó>  • / n UR                  [        R                  R                  5       5        [
        R                  " 5       u  p# UR                  U5        [        R                  " 5       nU/[        R                  " 5       QSPSU S3PnS n [        (       a)  [        R                  " [        R                  [        5      n[        R                   " XEU5      nUb%  [        R                  " [        R"                  U5        X0l        Xpl         [
        R(                  " U5        g ! [         a     GNf = f! Ub&  [        R                  " [        R"                  U5        f f = f!   [
        R(                  " U5        e = f! [
        R(                  " U5        f = f)Nz-cz7from multiprocessing.resource_tracker import main;main(Ú))ÚappendÚsysÚstderrÚfilenoÚ	ExceptionrT   Úpiper   Úget_executabler   Ú_args_from_interpreter_flagsÚ_HAVE_SIGMASKÚsignalr
   Ú	SIG_BLOCKÚ_IGNORED_SIGNALSÚspawnv_passfdsÚSIG_SETMASKr+   r,   rG   )r1   Úfds_to_passÚrÚwÚexeÚargsÚprev_sigmaskÚpids           r   Ú_launchÚResourceTracker._launch­   s[  € Øˆð	Ø×ÑœsŸz™z×0Ñ0Ó2Ô3ô �wŠw‹y‰ˆð	Ø×Ñ˜qÔ!ä×&Ò&Ó(ˆCàðä×2Ò2Ó4ðð ðð JÈ!ÈÈAÐNð	ˆDð  ˆLðMß ’=Ü#)×#9Ò#9¼&×:JÑ:JÔL\Ó#]�LÜ×)Ò)¨#°[ÓA�àÑ+Ü×*Ò*¬6×+=Ñ+=¸|ÔLð
 ŒHØ�Iä�HŠH�Q�KøôE ó 	Úð	ûð2  Ñ+Ü×*Ò*¬6×+=Ñ+=¸|ÕLð ,ûð	Ü�HŠH�QŒKØûô
 �HŠH�Q�KúsI   „-D) Á	AE( ÂAD: Ã(E( ÄF Ä)
D7Ä6D7Ä:+E%Å%E( Å(FÆF ÆFc                 ó|   • U R                   (       a  g[        R                  " SSS.SSS9S-   R                  S	5      $ )
zReturn a probe message.s   PROBE:0:noop
ÚPROBEr   )ÚcmdÚrtypeT©Ú,Ú:©Úensure_asciiÚ
separatorsÚ
Úascii)r/   ÚjsonÚdumpsÚencoder0   s    r   Ú_make_probe_messageÚ#ResourceTracker._make_probe_messageÕ   sB   € à×"×"Ø$ä�JŠJØ¨&Ñ1Ø!Ø%ñð
 ñ÷ ‰&�‹/ð	r   Nc                 ó’  • U R                      U R                   R                  5       S:”  a7  Uc  U R                  5       eU R                  R	                  U5      sS S S 5        $ U R
                  b+  Uc  U R                  5       nOUn U R                  U5        S nOU R                  5         S S S 5          U R                  R                  5       nU R                  U5        M.  ! [         a#    U R                  5         U R                  5          Nvf = f! , (       d  f       Nm= f! [         a     Of = fUb  U R                  U5        g g )Nr   )r*   rD   r5   r.   r[   r+   r�   Ú_writeÚOSErrorrW   rp   ÚpopleftÚ
IndexError)r1   ÚmsgÚto_sendÚreentrant_msgs       r   rQ   Ú)ResourceTracker._ensure_running_and_writeâ   s!  € Ø�Z‹ZØ�z‰z×*Ñ*Ó,¨qÓ0à‘;Ø×4Ñ4Ó6Ð6Ø×/Ñ/×6Ñ6°sÓ;÷ ‰Zð �x‰xÑ#à‘;Ø"×6Ñ6Ó8‘Gà!�Gð#Ø—K‘K Ô(ð
 ‘à—‘”÷+ ð. ðØ $× 8Ñ 8× @Ñ @Ó B�ð �K‰K˜Ô&ñ øô ó #Ø×/Ñ/Ô1Ø—L‘L–Nð#ú÷ �Zûô4 ó Ùðúð ‰?Ø�K‰K˜Õð sH   �ADÁ##DÂC"ÂDÂ5D# Ã"*DÄDÄDÄDÄ
D Ä#
D0Ä/D0c                 ó„   •  [         R                  " U R                  U R                  5       5        g! [         a     gf = f)z;Check that the pipe has not been closed by sending a probe.TF)rT   Úwriter+   r�   r…   r0   s    r   Ú_check_aliveÚResourceTracker._check_alive  s=   € ð	ô �HŠH�T—X‘X˜t×7Ñ7Ó9Ô:ð øô ó 	Ùð	ús   ‚/2 ²
?¾?c                 ó(   • U R                  SX5        g)z0Register name of resource with resource tracker.ÚREGISTERN©Ú_send©r1   r   ru   s      r   r   ÚResourceTracker.register  s   € à�
‰
�:˜tÕ+r   c                 ó(   • U R                  SX5        g)z2Unregister name of resource with resource tracker.Ú
UNREGISTERNr’   r”   s      r   r	   ÚResourceTracker.unregister  s   € à�
‰
�< Õ-r   c                 ó”   • [         R                  " U R                  U5      nU[        U5      :X  d   SU< S[        U5      < 35       eg )Nznbytes=z != len(msg)=)rT   r�   r+   Úlen)r1   rˆ   Únbytess      r   r„   ÚResourceTracker._write  s>   € Ü—’˜$Ÿ(™( CÓ(ˆØœ˜S›Ó!Ð> g f¡Y¨n´3°s³8±+Ð#>Ó>Ñ!r   c                 óR  • U R                   (       aL  SU;  aF  U SU SU S3R                  S5      n[        U5      S:”  a  [        S5      eU R	                  U5        g UR                  SS5      n[        U5      S:”  a  [        S	5      e[
        R                  " U5      R                  S5      nXUS
.n[        R                  " USSS9S-   R                  S5      n[        U5      S::  d   S[        U5       S35       eUR                  S5      (       d   eU R	                  U5        g )Nr|   rx   r}   i   zmsg too longúutf-8Úsurrogateescapeéÿ   z+shared memory name too long (max 255 bytes))rt   ru   Úbase64_nameTrv   ry   z"internal error: message too long (z bytes)ó   {)r/   r€   rš   rF   rQ   Úbase64Úurlsafe_b64encodeÚdecoder~   r   Ú
startswith)r1   rt   r   ru   rˆ   ÚbÚb64Úpayloads           r   r“   ÚResourceTracker._send  s  € Ø×"×" t°4Ó'7Ø�E˜˜4˜&  % ¨Ð+×2Ñ2°7Ó;ˆCÜ�3‹x˜#‹~ô ! Ó0Ð0Ø×*Ñ*¨3Ô/Øð �K‰K˜Ð!2Ó3ˆÜˆq‹6�C‹<ÜÐJÓKÐKÜ×&Ò& qÓ)×0Ñ0°Ó9ˆà¸cÑBˆÜ�zŠz˜'°ÀÑLÈtÑS×[Ñ[Ð\cÓdˆô �3‹x˜3‹ÐVÐ"DÄSÈÃXÀJÈgÐ VÓVˆØ�~‰~˜d×#Ñ#Ð#Ð#à×&Ñ& sÕ+r   )r-   r+   r*   r,   r.   r/   )Tr   )r   r    r!   r"   r2   r5   r:   r9   rT   rG   rH   rI   r>   rN   r   rW   rp   r�   rQ   rŽ   r   r	   r„   r“   r#   r   r   r   r%   r%   B   sp   † ò'òHò,ô
)ð �h‰hØ—
‘
Ø!×8Ñ8ô	!"òFò0òBò&&òPôòB	ò,ò.ò?õ,r   r%   c                 ó°  • U R                  S5      (       a¸   [        R                  " U R                  S5      5      nUS   nUS   nUR                  SS5      n[        U[        5      (       a*  [        U[        5      (       a  [        U[        5      (       d  [        SU< 35      e [        R                  " U5      R                  S	S
5      nOAU R                  5       R                  S5      R                  SSS9u  p7UR                  SSS9u  pdX4U4$ ! [         a  n[        SU < 35      UeS nAff = f! [
         a  n[        SU< 35      UeS nAff = f)Nr¢   r}   z$malformed resource_tracker message: rt   ru   r¡   Ú z#malformed resource_tracker fields: rž   rŸ   z(malformed resource_tracker base64_name: rx   r   )Úmaxsplit)r¦   r~   Úloadsr¥   r_   rF   ÚgetÚ
isinstanceÚstrr£   Úurlsafe_b64decodeÚstripÚsplitÚrsplit)ÚlineÚobjÚert   ru   r¨   r   Úrests           r   Ú_decode_messagerº   B  s=  € Ø‡��t×Ñð	XÜ—*’*˜TŸ[™[¨Ó1Ó2ˆCð �%‰jˆØ�G‘ˆØ�w‰w�} bÓ)ˆä˜#œs×#Ñ#¬:°e¼S×+AÑ+AÌÐTWÔY\×I]ÑI]ÝÊÐMÓNÐNð	[Ü×+Ò+¨CÓ0×7Ñ7¸ÐARÓS‰Dð —J‘J“L×'Ñ'¨Ó0×6Ñ6°sÀQÐ6ÐG‰	ˆØ—k‘k #°�kÐ2‰ˆØ�tÐÐøô# ó 	XÝÊÐOÓPÐVWÐWûð	Xûô ó 	[ÝÊSÐRÓSÐYZÐZûð	[ús/   ˜%D Â(&D6 Ä
D3ÄD.Ä.D3Ä6
EÅ EÅEc                 ój  • [         R                   " [         R                  [         R                  5        [         R                   " [         R                  [         R                  5        [        (       a)  [         R
                  " [         R                  [        5        [        R                  [        R                  4 H  n UR                  5         M     [        R                  5        Vs0 s H  o"[        5       _M     nnSn [!        U S5       nU H†  n [#        U5      u  pbn[        R%                  US5      nUc  ['        SU SU 35      eUS:X  a  X2   R)                  U5        MW  US:X  a  X2   R+                  U5        Mr  US:X  a  Mz  [-        S	U-  5      e   SSS5        UR3                  5        HY  u  p)U	(       a3   SnUS:X  a  O)[4        R6                  " S[9        U	5       SU SU	 35         U	 H  n  [        U   " U5        M     M[     [        R:                  " U5        g! [         a     GMz  f = fs  snf ! [         a8    S
n [        R.                  " [        R0                  " 5       6    GMd  !     GMk  = ff = f! , (       d  f       Nî= f! [         a     N®f = f! [         a*  n
Sn[4        R6                  " SU< SU
< 35         Sn
A
NËSn
A
ff = f! f = f! UR3                  5        H¦  u  p)U	(       aC   SnUS:X  a  O9[4        R6                  " S[9        U	5       SU SU	 35        O! [         a     Of = fU	 HQ  n  [        U   " U5        O7! [         a*  n
Sn[4        R6                  " SU< SU
< 35         Sn
A
OSn
A
ff = fMN  ! f = f   M¨     [        R:                  " U5        f = f)zRun resource tracker.r   ÚrbNzCannot register z. for automatic cleanup: unknown resource type r‘   r—   rs   zunrecognized command %ré   r   r   z%resource_tracker: There appear to be z leaked z" objects to clean up at shutdown: é   zresource_tracker: z: )rd   ÚSIGINTÚSIG_IGNÚSIGTERMrc   r
   ÚSIG_UNBLOCKrf   r\   ÚstdinÚstdoutrG   r_   Ú_CLEANUP_FUNCSÚkeysÚsetÚopenrº   r¯   rF   ÚaddÚremover   Ú
excepthookÚexc_infoÚitemsrU   rV   rš   Úexit)ÚfdÚfru   ÚcacheÚ	exit_coder¶   rt   r   Úcleanup_funcÚrtype_cacher¸   s              r   ÚmainrÕ   Z  sd  € ô ‡M‚M”&—-‘-¤§¡Ô0Ü
‡M‚M”&—.‘.¤&§.¡.Ô1ß‚}Ü×Òœv×1Ñ1Ô3CÔDä�i‰iœŸ™Ó$ˆð	Ø�G‰GŽIñ %ô (6×':Ñ':Ô'<Ó=Ò'<˜e”C“EŠ\Ñ'<€EÐ=Ø€Ið9ä�"�dŒ^˜qÛ�ðÜ'6°tÓ'<Ñ$�C Ü#1×#5Ñ#5°e¸TÓ#B�LØ#Ñ+Ü(Ø.¨t¨fð 55Ø5:°Gð=ó>ð >ð ˜jÓ(Ø™×(Ñ(¨Ö.Ø Ó,Ø™×+Ñ+¨DÖ1Ø ›Ùä*Ð+DÀsÑ+JÓKÐKñ! ÷ ð4 #(§+¡+¦-ÑˆEÞðØ !�IØ Ó'ð ä ŸšØCÜ" ;Ó/Ð0°¸¸ð @5Ø5@°MðCõó $�ððNÜ& uÒ-¨dÔ3ñ
 ó $ñ! #0ô: 	�Š�Õøô ó 	Ûð	üò >øô. !ó Ø !�IðÜŸš¬¯ª«Õ7øðÜúðú÷% �^ûôP !ó Ùðûô %ó NØ$%˜	Ü Ÿ›ÃDÊ!Ð&L×MÑMûðNûð ûð7 #(§+¡+¦-ÑˆEÞðØ !�IØ Ó'ð ä ŸšØCÜ" ;Ó/Ð0°¸¸ð @5Ø5@°MðCõøô
 !ó Ùðúã#�ððNÜ& uÒ-¨dÕ3øÜ$ó NØ$%˜	Ü Ÿ›ÃDÊ!Ð&L×MÑMûðNúñ ø�Dúó $ñ! #0ô: 	�Š�ÕúsK  Â?H'Ã)H9ÄK  ÄJÄAH>Å&JÅ(H>ÆJÆH>Æ	JÆH>ÆJÆK  Ç JÇ	(JÇ9J$È'
H6È5H6È>J É&I5É1JÉ5I<	É7J É8JÉ<J Ê JÊ
JÊK  Ê
J!Ê J!Ê$
KÊ. KËKËKËKËKË N2Ë>L0ÌN2Ì(L0Ì/N2Ì0
L=	Ì:N2Ì<L=	Ì=N2ÍMÍNÍ
NÍ! NÎNÎNÎNÎN2ÎNÎ N2)%r£   rT   rd   r\   r(   rU   Úcollectionsr   r~   r¬   r   r   Ú__all__Úhasattrrc   r¿   rÁ   rf   r   rÅ   r   Ú_multiprocessingÚ_posixshmemÚupdater   Ú
shm_unlinkr   r   Úobjectr%   Ú_resource_trackerr   r   r	   rN   rº   rÕ   r   r   r   Ú<module>rß      s  ðó$ Û 	Û Û 
Û Û Ý ã å Ý â
6€á˜Ð 1Ó2€Ø—M‘M 6§>¡>Ð2Ð òHð Ùñ€ð
 ‡7�7ˆgÓÛÛñ Ð ×.Ñ.Ø×ÑØÐ)×4Ñ4ð
ô 	ð ×ÑØ˜×/Ñ/ðô ô
	˜ô 	ôw,�fô w,ñr $Ó%Ð Ø"×1Ñ1€Ø×%Ñ%€Ø×)Ñ)€
Ø×Ñ€òó0Jr   