
    x[h                        % 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rS SKJr  S SK	J
r
JrJrJrJr  S SKJr  S SKJr  \R(                  " \5      rSr\\S'   Sr\\S	'   \R4                  S
\R6                  S\R8                  S0r\\\\4      \S'    " S S\5      r \ " S\RB                  5      r"\\S'   \ " S \RF                  5      r$\\S'   \"q%\RL                  " 5       r'S\\\
S4   SS4S jr(S r)S r*S r+\ RX                  S 5       r-g)    N)StringIO)CallableDictFinal
NamedTupleUnion)version)log_utilz#Cloud-init {} received {}, exiting
SIG_MESSAGE   BACK_FRAME_TRACE_DEPTHz/Cloud-init %(version)s received SIGINT, exitingz0Cloud-init %(version)s received SIGTERM, exitingz0Cloud-init %(version)s received SIGABRT, exitingSIGNALSc                   *    \ rS rSr% \\S'   \\S'   Srg)ExitBehavior    	exit_code	log_level N)__name__
__module____qualname____firstlineno__int__annotations____static_attributes__r       :/usr/lib/python3/dist-packages/cloudinit/signal_handler.pyr   r       s    NNr   r      SIGNAL_EXIT_BEHAVIOR_CRASHSIGNAL_EXIT_BEHAVIOR_QUIETsigreturnc                    [        U 5      (       a7  [        U [        R                  5      (       d  [        R                  SU 5        ggU [        R                  :X  a  [        R                  S5        gU c  [        R                  S5        gU [        R                  :X  a  [        R                  SU 5        g[        R                  S[        U 5      U 5        g)z+inspect_handler() logs signal handler statez.Signal state [%s] - previously custom handler.z,Signal state [SIG_IGN] - previously ignored.Nz;Signal state [None] - previously not installed from Python.zISignal state [%s] - default way of handling signal was previously in use.zSignal state [%s(%s)] - unknown)callable
isinstancetypesBuiltinFunctionTypeLOGinfosignalSIG_IGNSIG_DFLwarningtype)r!   s    r   inspect_handlerr/   +   s    }} #u8899HHEsK :		?@	NO		!	
 	5tCy#Fr   c                 `   X:  d  U (       d  g [         R                  " U 5      nSUS-  -  nUR                  U< SUR                  < S35        UR                  U< SUR                  < S35        UR                  U< SUR
                  < S35        [        U R                  US-   X#5        g )N    z
Filename: 
z
Function: zLine number: r   )inspectgetframeinfowritefilenamefunctionlineno_pprint_framef_back)framedepth	max_depthcontents
frame_infoprefixs         r   r:   r:   B   s    %%e,JEAIFNN1D1DEFNN1D1DEFNNFJ4E4EFG%,,	9?r   c                    [        U [        R                  5      (       a  U R                  OU n[	        [
        R                  [        R                  " 5       U5      5      n[        US[        U5        [        R                  " UR                  5       [        [        R                   S9  ["        R$                  " [        R&                  5        g )Nr   )logr   )r%   r*   Signalsnamer   r   formatvrversion_stringr:   r   r
   	multi_loggetvaluer(   _SIGNAL_EXIT_BEHAVIORr   sysexitr   )signumr<   rE   r?   s       r   _handle_exitrO   M   s    $VV^^<<6;;&D**2+<+<+>EFH%2H=0E0O0O HH",,-r   c                      Sn [         R                  5        H'  n[        [        R                  " U[        5      5        M)     U [        [         5      -  n U $ )zattach cloud-init's handlersr   )r   keysr/   r*   rO   len)sigs_attachedrN   s     r   attach_handlersrT   X   s>    M,,.fl;< !S\!Mr   c               #   l   #    [            [        qSv   [        qSSS5        g! , (       d  f       g= f7f)a  suspend_crash() allows signals to be received without exiting 1

This allow signal handling without a crash where it is expected. The
call stack is still printed if signal is received during this context, but
the return code is 0 and no traceback is printed.

Threadsafe.
N)_SUSPEND_WRITE_LOCKr    rK   r   r   r   r   suspend_crashrW   a   s$      
 : : 
		s   4#	4
14).
contextlibr4   loggingr*   rL   	threadingr&   ior   typingr   r   r   r   r   	cloudinitr	   rG   cloudinit.logr
   	getLoggerr   r(   r   r   r   SIGINTSIGTERMSIGABRTr   r   strr   ERRORr   INFOr    rK   RLockrV   r/   r:   rO   rT   contextmanagerrW   r   r   r   <module>rh      s"       
    ; ; # "!;U ; !  !
MMD
NNF
NNF"tCH~	 : 
 %1GMM$B E B$0GLL$A E A2 oo' GsHd23 G G.@. ; ;r   