# Poco

# class SignalHandler

Library: Foundation
Package: Threading
Header: Poco/SignalHandler.h

## Description

This helper class simplifies the handling of POSIX signals.

The class provides a signal handler (installed with installHandlers()) that translates certain POSIX signals (SIGILL, SIGBUS, SIGSEGV, SIGSYS) into C++ exceptions.

Internally, a stack of sigjmp_buf structs is maintained for each thread. The constructor pushes a new sigjmp_buf onto the current thread's stack. The destructor pops the sigjmp_buf from the stack.

The poco_throw_on_signal macro creates an instance of SignalHandler on the stack, which results in a new sigjmp_buf being created. The sigjmp_buf is then set-up with sigsetjmp().

The handleSignal() method, which is invoked when a signal arrives, checks if a sigjmp_buf is available for the current thread. If so, siglongjmp() is used to jump out of the signal handler.

Typical usage is as follows:

    try
    {
         poco_throw_on_signal;
         ...
    }
    catch (Poco::SignalException&)
    {
        ...
    }

The best way to deal with a SignalException is to log as much context information as possible, to aid in debugging, and then to exit.

The SignalHandler can be disabled globally by compiling POCO and client code with the POCO_NO_SIGNAL_HANDLER macro defined.

## Member Summary

Member Functions: handleSignal, install, jumpBuffer, jumpBufferVec, throwSignalException

## Nested Classes

### struct JumpBuffer

sigjmp_buf cannot be used to instantiate a std::vector, so we provide a wrapper struct.

## Types

### JumpBufferVec

typedef std::vector < JumpBuffer > JumpBufferVec;

## Constructors

### SignalHandler

SignalHandler();

Creates the SignalHandler.

## Destructor

### ~SignalHandler

~SignalHandler();

Destroys the SignalHandler.

## Member Functions

### install

static void install();

Installs signal handlers for SIGILL, SIGBUS, SIGSEGV and SIGSYS.

### jumpBuffer

sigjmp_buf & jumpBuffer();

Returns the top-most sigjmp_buf for the current thread.

### throwSignalException

static void throwSignalException(
int sig
);

Throws a SignalException with a textual description of the given signal as argument.

### handleSignal

static void handleSignal(
int sig
);

The actual signal handler.

### jumpBufferVec

static JumpBufferVec & jumpBufferVec();

Returns the JumpBufferVec for the current thread.