Provide an adapter that transforms various types of signal handlers into the scheme used by the ACE_Reactor. More...
#include <Sig_Adapter.h>


Public Member Functions | |
| ACE_Sig_Adapter (ACE_Sig_Action &, int sigkey) | |
| ACE_Sig_Adapter (ACE_Event_Handler *, int sigkey) | |
| ACE_Sig_Adapter (ACE_Sig_Handler_Ex, int sigkey=0) | |
| ~ACE_Sig_Adapter (void) | |
| int | sigkey (void) |
| virtual int | handle_signal (int, siginfo_t *, ucontext_t *) |
| Called by the <Reactor> to dispatch the signal handler. | |
Private Types | |
| enum | { ACE_HANDLER, SIG_ACTION, C_FUNCTION } |
Is this an external handler or an ACE handler? More... | |
Private Attributes | |
| int | sigkey_ |
| Key for this signal handler (used to remove it). | |
| enum ACE_Sig_Adapter:: { ... } | type_ |
| Is this an external handler or an ACE handler? | |
| ACE_Sig_Action | sa_ |
| This is an external handler (ugh). | |
| ACE_Event_Handler * | eh_ |
| This is an ACE hander. | |
| ACE_Sig_Handler_Ex | sig_func_ |
| This is a normal C function. | |
Provide an adapter that transforms various types of signal handlers into the scheme used by the ACE_Reactor.
Definition at line 35 of file Sig_Adapter.h.
anonymous enum [private] |
Is this an external handler or an ACE handler?
| ACE_HANDLER |
We're just wrapping an ACE_Event_Handler. |
| SIG_ACTION |
An ACE_Sig_Action. |
| C_FUNCTION |
A normal C function. |
Definition at line 55 of file Sig_Adapter.h.
{
/// We're just wrapping an ACE_Event_Handler.
ACE_HANDLER,
/// An ACE_Sig_Action.
SIG_ACTION,
/// A normal C function.
C_FUNCTION
} type_;
| ACE_Sig_Adapter::ACE_Sig_Adapter | ( | ACE_Sig_Action & | sa, | |
| int | sigkey | |||
| ) |
Definition at line 8 of file Sig_Adapter.cpp.
: sigkey_ (sigkey), type_ (SIG_ACTION), sa_ (sa) { // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter"); }
| ACE_Sig_Adapter::ACE_Sig_Adapter | ( | ACE_Event_Handler * | eh, | |
| int | sigkey | |||
| ) |
Definition at line 16 of file Sig_Adapter.cpp.
: sigkey_ (sigkey), type_ (ACE_HANDLER), eh_ (eh) { // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter"); }
| ACE_Sig_Adapter::ACE_Sig_Adapter | ( | ACE_Sig_Handler_Ex | sig_func, | |
| int | sigkey = 0 | |||
| ) |
Definition at line 25 of file Sig_Adapter.cpp.
: sigkey_ (sigkey), type_ (C_FUNCTION), sig_func_ (sig_func) { // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter"); }
| ACE_Sig_Adapter::~ACE_Sig_Adapter | ( | void | ) |
Definition at line 34 of file Sig_Adapter.cpp.
{
}
| int ACE_Sig_Adapter::handle_signal | ( | int | signum, | |
| siginfo_t * | siginfo, | |||
| ucontext_t * | ucontext | |||
| ) | [virtual] |
Called by the <Reactor> to dispatch the signal handler.
Reimplemented from ACE_Event_Handler.
Definition at line 46 of file Sig_Adapter.cpp.
{
ACE_TRACE ("ACE_Sig_Adapter::handle_signal");
switch (this->type_)
{
case SIG_ACTION:
{
// We have to dispatch a handler that was registered by a
// third-party library.
ACE_Sig_Action old_disp;
// Make sure this handler executes in the context it was
// expecting...
this->sa_.register_action (signum, &old_disp);
ACE_Sig_Handler_Ex sig_func = ACE_Sig_Handler_Ex (this->sa_.handler ());
(*sig_func) (signum, siginfo, ucontext);
// Restore the original disposition.
old_disp.register_action (signum);
break;
}
case ACE_HANDLER:
this->eh_->handle_signal (signum, siginfo, ucontext);
break;
case C_FUNCTION:
(*this->sig_func_) (signum, siginfo, ucontext);
break;
}
return 0;
}
| int ACE_Sig_Adapter::sigkey | ( | void | ) |
Returns this signal key that's used to remove this from the ACE_Reactor's internal table.
Definition at line 39 of file Sig_Adapter.cpp.
ACE_Event_Handler* ACE_Sig_Adapter::eh_ [private] |
This is an ACE hander.
Definition at line 71 of file Sig_Adapter.h.
ACE_Sig_Action ACE_Sig_Adapter::sa_ [private] |
This is an external handler (ugh).
Definition at line 68 of file Sig_Adapter.h.
ACE_Sig_Handler_Ex ACE_Sig_Adapter::sig_func_ [private] |
This is a normal C function.
Definition at line 74 of file Sig_Adapter.h.
int ACE_Sig_Adapter::sigkey_ [private] |
Key for this signal handler (used to remove it).
Definition at line 52 of file Sig_Adapter.h.
enum { ... } ACE_Sig_Adapter::type_ [private] |
Is this an external handler or an ACE handler?
1.7.0