00001
00002
00003 #include "ace/Sig_Adapter.h"
00004
00005 ACE_RCSID(ace, Sig_Adapter, "$Id: Sig_Adapter.cpp 73522 2006-07-14 21:30:26Z ossama $")
00006
00007
00008 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Sig_Action &sa, int sigkey)
00009 : sigkey_ (sigkey),
00010 type_ (SIG_ACTION),
00011 sa_ (sa)
00012 {
00013
00014 }
00015
00016 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Event_Handler *eh,
00017 int sigkey)
00018 : sigkey_ (sigkey),
00019 type_ (ACE_HANDLER),
00020 eh_ (eh)
00021 {
00022
00023 }
00024
00025 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Sig_Handler_Ex sig_func,
00026 int sigkey)
00027 : sigkey_ (sigkey),
00028 type_ (C_FUNCTION),
00029 sig_func_ (sig_func)
00030 {
00031
00032 }
00033
00034 ACE_Sig_Adapter::~ACE_Sig_Adapter ()
00035 {
00036 }
00037
00038 int
00039 ACE_Sig_Adapter::sigkey (void)
00040 {
00041 ACE_TRACE ("ACE_Sig_Adapter::sigkey");
00042 return this->sigkey_;
00043 }
00044
00045 int
00046 ACE_Sig_Adapter::handle_signal (int signum,
00047 siginfo_t *siginfo,
00048 ucontext_t *ucontext)
00049 {
00050 ACE_TRACE ("ACE_Sig_Adapter::handle_signal");
00051
00052 switch (this->type_)
00053 {
00054 case SIG_ACTION:
00055 {
00056
00057
00058
00059 ACE_Sig_Action old_disp;
00060
00061
00062
00063 this->sa_.register_action (signum, &old_disp);
00064
00065 ACE_Sig_Handler_Ex sig_func = ACE_Sig_Handler_Ex (this->sa_.handler ());
00066
00067 (*sig_func) (signum, siginfo, ucontext);
00068
00069 old_disp.register_action (signum);
00070 break;
00071 }
00072 case ACE_HANDLER:
00073 this->eh_->handle_signal (signum, siginfo, ucontext);
00074 break;
00075 case C_FUNCTION:
00076 (*this->sig_func_) (signum, siginfo, ucontext);
00077 break;
00078 }
00079 return 0;
00080 }