Loading...
Searching...
No Matches
ASSA::SigAction Class Reference

`#include <SigAction.h>`

## Public Member Functions

| SigAction ()
| Default constructor creates SigAction object with null-action.
| SigAction (C_SIG_HANDLER handler_, SigSet *sig_mask_=0, int flags_=0)
| Construct a SigAction object with "C" signal handler function.
| SigAction (C_SIG_HANDLER handler_, int signum_, SigSet *sig_mask_=0, int flags_=0)
| Construct a SigAction with "C" signal handler function and change program's disposition for signum_ immediately.
int | register_action (int signum_, SigAction *oaction_=0)
| Register this object as current disposition for signal signum_, and store old disposition in oaction_, if not NULL.
int | restore_action (int signum_, SigAction &oaction_)
| Change object's disposition to oaction_, and install it as current disposition for the signal signum_.
int | retrieve_action (int signum_)
| Retrieve current disposition for the signal signum_ into this object.
void | action (SIGACTION *sa_)
| Set sigaction structure to sa_.
SIGACTION * | action ()
| Retrieve current sigaction.
void | flags (int new_flags_)
| Set signal flags to new_flags_.
int | flags ()
| Retrieve current flags.
void | mask (SigSet &mask_set_)
| Set new signal mask mask_set_.
SigSet | mask ()
| Retrieve current signal mask.
void | handler (C_SIG_HANDLER sha_)
| Set new signal handler to function pointer sha_.
C_SIG_HANDLER | handler ()
| Retrieve current signal handler function.
| operator SIGACTION * ()
| Conversion operator that converts SigAction to a pointer to the internal struct sigaction data member for direct use with C-library functions.

## Private Attributes

SIGACTION | m_sa
| sigaction structure itself

## Detailed Description

Definition at line 94 of file SigAction.h.

## Constructor & Destructor Documentation

## SigAction() [1/3]

ASSA::SigAction::SigAction | ( |  | ) |

inline

Default constructor creates SigAction object with null-action.

Definition at line 220 of file SigAction.h.

{
trace_with_mask("SigAction::SigAction", SIGACT);
m_sa.sa_flags = 0;
sigemptyset(&m_sa.sa_mask);
*(C_SIG_HANDLER*) &m_sa.sa_handler = (C_SIG_HANDLER) 0;
}
trace_with_mask
#define trace_with_mask(s, m)
trace_with_mask() is used to trace function call chain in C++ program.
Definition Logger.h:437
C_SIG_HANDLER
void(* C_SIG_HANDLER)(int)
Definition SigAction.h:28
ASSA::SigAction::m_sa
SIGACTION m_sa
sigaction structure itself
Definition SigAction.h:213
ASSA::SIGACT
@ SIGACT
Class SigACtion messages.
Definition LogMask.h:48

References m_sa, ASSA::SIGACT, and trace_with_mask.

Referenced by register_action(), and restore_action().

## SigAction() [2/3]

ASSA::SigAction::SigAction | ( | C_SIG_HANDLER | handler_,
|  | SigSet * | sig_mask_ = 0,
|  | int | flags_ = 0 )

inline

Construct a SigAction object with "C" signal handler function.

This constructor doesn't install any actions - it is merely a shell for actiono to be installed for any signal(s). Thus, you can reuse the same object for number of differen signals.

Parameters

  handler_ | "C" signal handler function to call.
  sig_mask_ | Set of signals to block while handler_ is active.
  flags_ | Controls behavior of signal handler (OS-specific: see Available Options: section of documentation).

Definition at line 231 of file SigAction.h.

{
trace_with_mask("SigAction::SigAction(,,)", SIGACT);
m_sa.sa_flags = flags_;
if (sig_mask_ == NULL) {
sigemptyset(&m_sa.sa_mask);
}
else {
/*---
here, suppose to do bitwise structure assignment,
but does it really do so?
= *sig_mask_
= *(sig_mask_.operator *())
= *(SigSet *tmp = &sig_mask_.m_sa) ????
---*/
m_sa.sa_mask = **sig_mask_;
}
*(C_SIG_HANDLER*) &m_sa.sa_handler = (C_SIG_HANDLER) handler_;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## SigAction() [3/3]

ASSA::SigAction::SigAction | ( | C_SIG_HANDLER | handler_,
|  | int | signum_,
|  | SigSet * | sig_mask_ = 0,
|  | int | flags_ = 0 )

inline

Construct a SigAction with "C" signal handler function and change program's disposition for signum_ immediately.

First argument is the "C" function. It cannot be a non-static C++ class member function. This function pretty much simulates C-like approach the the signal handling. For C++ member function approach, see SigHandler & Co.

Parameters

  handler_ | "C" signal handler function to call.
  signum_ | Signal which disposition is to change.
  sig_mask_ | Set of signals to block while handler_ is active.
  flags_ | Controls behavior of signal handler (OS-specific: see Available Options: section of documentation).

Definition at line 256 of file SigAction.h.

{
trace_with_mask("SigAction::SigAction(,,,)", SIGACT);
m_sa.sa_flags = flags_;
if (sig_mask_ == NULL) {
sigemptyset(&m_sa.sa_mask);
}
else {
/*--- same problem as above... ---*/
m_sa.sa_mask = **sig_mask_;
}
*(C_SIG_HANDLER*) &m_sa.sa_handler = (C_SIG_HANDLER) handler_;
/*--- installing disposition... ---*/
sigaction (signum_, &m_sa, 0);
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## Member Function Documentation

## action() [1/2]

SIGACTION * ASSA::SigAction::action | ( |  | ) |

inline

Retrieve current sigaction.

Returns
  Pointer to an internal struct sigaction.

Definition at line 287 of file SigAction.h.

{
trace_with_mask("SigAction::action", SIGACT);
return &m_sa;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## action() [2/2]

void ASSA::SigAction::action | ( | SIGACTION * | sa_ | ) |

inline

Set sigaction structure to sa_.

Parameters

  sa_ | New value for internal struct sigaction.

Definition at line 279 of file SigAction.h.

{
trace_with_mask("SigAction::action", SIGACT);
m_sa = *sa_;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

Referenced by register_action(), and restore_action().

## flags() [1/2]

int ASSA::SigAction::flags | ( |  | ) |

inline

Retrieve current flags.

Returns
  Value of current flags for this action.

Definition at line 305 of file SigAction.h.

{
trace_with_mask("int SigAction::flags()", SIGACT);
return m_sa.sa_flags;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## flags() [2/2]

void ASSA::SigAction::flags | ( | int | new_flags_ | ) |

inline

Set signal flags to new_flags_.

Parameters

  new_flags_ | New flags for this action.

Definition at line 296 of file SigAction.h.

{
trace_with_mask("void SigAction::flags()", SIGACT);
m_sa.sa_flags = new_flags_;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## handler() [1/2]

C_SIG_HANDLER ASSA::SigAction::handler | ( |  | ) |

inline

Retrieve current signal handler function.

Definition at line 342 of file SigAction.h.

{
trace_with_mask("C_SIG_HANDLER SigAction::handler()", SIGACT);
return (C_SIG_HANDLER) m_sa.sa_handler;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## handler() [2/2]

void ASSA::SigAction::handler | ( | C_SIG_HANDLER | sha_ | ) |

inline

Set new signal handler to function pointer sha_.

Definition at line 333 of file SigAction.h.

{
trace_with_mask("void SigAction::handler()", SIGACT);
*(C_SIG_HANDLER*) &m_sa.sa_handler = (C_SIG_HANDLER) sha_;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

Referenced by ASSA::SigHandler::install(), ASSA::SigHandlers::install(), and ASSA::SigHandlers::remove().

## mask() [1/2]

SigSet ASSA::SigAction::mask | ( |  | ) |

inline

Retrieve current signal mask.

Definition at line 323 of file SigAction.h.

{
trace_with_mask("SigSet SigAction::mask()", SIGACT);
SigSet tmpset(&m_sa.sa_mask);
return tmpset;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## mask() [2/2]

void ASSA::SigAction::mask | ( | SigSet & | mask_set_ | ) |

inline

Set new signal mask mask_set_.

Definition at line 314 of file SigAction.h.

{
trace_with_mask("void SigAction::mask()", SIGACT);
m_sa.sa_mask = *mask_set_;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## operator SIGACTION *()

ASSA::SigAction::operator SIGACTION * | ( |  | ) |

inline

Conversion operator that converts SigAction to a pointer to the internal struct sigaction data member for direct use with C-library functions.

Definition at line 351 of file SigAction.h.

{
trace_with_mask("SigAction::operator SIGACTION * ()", SIGACT);
return &m_sa;
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

## register_action()

int ASSA::SigAction::register_action | ( | int | signum_,
|  | SigAction * | oaction_ = 0 )

inline

Register this object as current disposition for signal signum_, and store old disposition in oaction_, if not NULL.

This function installs C_SIG_HANDLER this object represents, thus simulating C-like approach to signal handling.

Parameters

  signum_ | Signal which disposition to install.
  oaction_ | Placeholder for the old disposition.

Returns
  0 on success, -1 on error, with errno indicating the error.

Definition at line 359 of file SigAction.h.

{
trace_with_mask("SigAction::register_action()", SIGACT);
/*--- place here recursive mutex lock to guard ... ---*/
struct sigaction *osa = oaction_ == 0 ? 0 : oaction_->action();
return sigaction(signum_, &m_sa, osa);
}

References action(), m_sa, ASSA::SIGACT, SigAction(), and trace_with_mask.

Referenced by ASSA::SigHandler::dispatch(), ASSA::GenServer::init(), ASSA::SigHandler::install(), ASSA::SigHandlers::install(), ASSA::SigHandler::remove(), and ASSA::SigHandlers::remove().

## restore_action()

int ASSA::SigAction::restore_action | ( | int | signum_,
|  | SigAction & | oaction_ )

inline

Change object's disposition to oaction_, and install it as current disposition for the signal signum_.

Parameters

  signum_ | Signal which disposition to restore.
  oaction_ | Disposition to restore.

Returns
  0 on success, -1 on error, with errno indicating the error.

Definition at line 370 of file SigAction.h.

{
trace_with_mask("SigAction::restore_action()", SIGACT);
m_sa = *oaction_.action();
return sigaction(signum_, &m_sa, 0);
}

References action(), m_sa, ASSA::SIGACT, SigAction(), and trace_with_mask.

## retrieve_action()

int ASSA::SigAction::retrieve_action | ( | int | signum_ | ) |

inline

Retrieve current disposition for the signal signum_ into this object.

Parameters

  signum_ | Signal number

Returns
  0 on success, -1 on error, with errno indicating the error.

Definition at line 380 of file SigAction.h.

{
trace_with_mask("SigAction::retrieve_action()", SIGACT);
return sigaction(signum_, 0, &m_sa);
}

References m_sa, ASSA::SIGACT, and trace_with_mask.

Referenced by ASSA::SigHandler::install(), and ASSA::SigHandlers::install().

## Member Data Documentation

## m_sa

SIGACTION ASSA::SigAction::m_sa

private

sigaction structure itself

Definition at line 213 of file SigAction.h.

Referenced by action(), action(), flags(), flags(), handler(), handler(), mask(), mask(), operator SIGACTION *(), register_action(), restore_action(), retrieve_action(), SigAction(), SigAction(), and SigAction().

The documentation for this class was generated from the following file:

- SigAction.h