NAME

ACE_Sig_Handler - This is the main dispatcher of signals for ACE. It improves the existing UNIX signal handling mechanism by allowing C++ objects to handle signals in a way that avoids the use of global/static variables and functions.

SYNOPSIS


#include <ace/Signal.h>


class ACE_Sig_Handler
{
  public:
    virtual int register_handler (
        int signum,
        ACE_Event_Handler *new_sh,
        ACE_Sig_Action *new_disp = 0,
        ACE_Event_Handler **old_sh = 0,
        ACE_Sig_Action *old_disp = 0
        );
    virtual int remove_handler (
        int signum,
        ACE_Sig_Action *new_disp = 0,
        ACE_Sig_Action *old_disp = 0,
        int sigkey = -1
        );
    static sig_atomic_t sig_pending (void);
    static void sig_pending (sig_atomic_t);
    virtual ACE_Event_Handler *handler (int signum);
    virtual ACE_Event_Handler *handler (
        int signum,
        ACE_Event_Handler *
        );
    void dump (void) const;
    ACE_ALLOC_HOOK_DECLARE;
  protected:
    static int in_range (int signum);
    static sig_atomic_t sig_pending_;
    static ACE_Recursive_Thread_Mutex ace_sig_handler_lock_;
  private:
    static void dispatch (int, siginfo_t *, ucontext_t *);
    static ACE_Event_Handler *signal_handlers_[NSIG];
};

DESCRIPTION

Using this class a program can register an ACE_Event_Handler with the ACE_Sig_Handler in order to handle a designated signum. When a signal occurs that corresponds to this signum, the handle_signal method of the registered ACE_Event_Handler is invoked automatically.

Registration and removal methods.

virtual int register_handler (
    int signum,
    ACE_Event_Handler *new_sh,
    ACE_Sig_Action *new_disp = 0,
    ACE_Event_Handler **old_sh = 0,
    ACE_Sig_Action *old_disp = 0
    );
virtual int remove_handler (
    int signum,
    ACE_Sig_Action *new_disp = 0,
    ACE_Sig_Action *old_disp = 0,
    int sigkey = -1
    );
Set/get signal status.
static sig_atomic_t sig_pending (void);
static void sig_pending (sig_atomic_t);

Set/get the handler associated with a particular signal.

virtual ACE_Event_Handler *handler (int signum);
virtual ACE_Event_Handler *handler (int signum, ACE_Event_Handler *);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;

These methods and data members are shared by derived classes.

static int in_range (int signum);
static sig_atomic_t sig_pending_;
static ACE_Recursive_Thread_Mutex ace_sig_handler_lock_;

AUTHOR

Doug Schmidt

LIBRARY

ace