
    x[h                        U d dl Z d dlZ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
mZmZmZmZ d dlmZ d dlmZ  ej(                  e      ZdZeed<   dZeed	<   ej4                  d
ej6                  dej8                  diZeeeef      ed<    G d de      Z  e dejB                        Z"eed<    e d ejF                        Z$eed<   e"a% ejL                         Z'deee
df   ddfdZ(d Z)d Z*d Z+e jX                  d        Z-y)    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                   "    e Zd ZU eed<   eed<   y)ExitBehavior	exit_code	log_levelN)__name__
__module____qualname__int__annotations__     :/usr/lib/python3/dist-packages/cloudinit/signal_handler.pyr   r       s    NNr   r      SIGNAL_EXIT_BEHAVIOR_CRASHSIGNAL_EXIT_BEHAVIOR_QUIETsigreturnc                    t        |       r2t        | t        j                        st        j                  d|        yy| t        j                  k(  rt        j                  d       y| t        j                  d       y| t        j                  k(  rt        j                  d|        yt        j                  dt        |       |        y)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HHEsK :		?@	NO		!	
 	5tCy#Fr   c                 J   ||kD  s| sy t        j                  |       }d|dz  z  }|j                  |d|j                  d       |j                  |d|j                  d       |j                  |d|j
                  d       t        | j                  |dz   ||       y )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   r7   r7   B   s    y%%e,JEAIFNN1D1DEFNN1D1DEFNNFJ4E4EFG%,,	9h?r   c                    t        | t        j                        r| j                  n| }t	        t
        j                  t        j                         |            }t        |dt        |       t        j                  |j                         t        t        j                          t#        j$                  t        j&                         y )Nr   )logr   )r"   r'   Signalsnamer   r   formatvrversion_stringr7   r   r
   	multi_loggetvaluer%   _SIGNAL_EXIT_BEHAVIORr   sysexitr   )signumr9   rB   r<   s       r   _handle_exitrL   M   s    $VV^^<6;;&D**2+<+<+>EFH%2H=0E0O0O HH",,-r   c                      d} t         j                         D ]%  }t        t        j                  |t                     ' | t        t               z  } | S )zattach cloud-init's handlersr   )r   keysr,   r'   rL   len)sigs_attachedrK   s     r   attach_handlersrQ   X   sC    M,,. =fl;<=S\!Mr   c               #   b   K   t         5  t        ad t        addd       y# 1 sw Y   yxY ww)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   rH   r   r   r   r   suspend_crashrT   a   s.      
 ; : :; ; ;s   /#	/,/).
contextlibr1   loggingr'   rI   	threadingr#   ior   typingr   r   r   r   r   	cloudinitr	   rD   cloudinit.logr
   	getLoggerr   r%   r   r   r   SIGINTSIGTERMSIGABRTr   r   strr   ERRORr   INFOr   rH   RLockrS   r,   r7   rL   rQ   contextmanagerrT   r   r   r   <module>re      s&       
    ; ; # "g!;U ; !  !
MMD
NNF
NNF"tCH~	 : 
 %1GMM$B E B$0GLL$A E A2 %ioo' GsHd23 G G.@. ; ;r   