Initial Patch of Auction House bot rev. 135
[auctionmangos.git] / dep / ACE_wrappers / ace / Sig_Adapter.cpp
blobd1af40f12d56cc24302aa081b6c67ea371df6651
1 // $Id: Sig_Adapter.cpp 80826 2008-03-04 14:51:23Z wotte $
3 #include "ace/Sig_Adapter.h"
5 ACE_RCSID(ace, Sig_Adapter, "$Id: Sig_Adapter.cpp 80826 2008-03-04 14:51:23Z wotte $")
8 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Sig_Action &sa, int sigkey)
9 : sigkey_ (sigkey),
10 type_ (SIG_ACTION),
11 sa_ (sa)
13 // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter");
16 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Event_Handler *eh,
17 int sigkey)
18 : sigkey_ (sigkey),
19 type_ (ACE_HANDLER),
20 eh_ (eh)
22 // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter");
25 ACE_Sig_Adapter::ACE_Sig_Adapter (ACE_Sig_Handler_Ex sig_func,
26 int sigkey)
27 : sigkey_ (sigkey),
28 type_ (C_FUNCTION),
29 sig_func_ (sig_func)
31 // ACE_TRACE ("ACE_Sig_Adapter::ACE_Sig_Adapter");
34 ACE_Sig_Adapter::~ACE_Sig_Adapter ()
38 int
39 ACE_Sig_Adapter::sigkey (void)
41 ACE_TRACE ("ACE_Sig_Adapter::sigkey");
42 return this->sigkey_;
45 int
46 ACE_Sig_Adapter::handle_signal (int signum,
47 siginfo_t *siginfo,
48 ucontext_t *ucontext)
50 ACE_TRACE ("ACE_Sig_Adapter::handle_signal");
52 switch (this->type_)
54 case SIG_ACTION:
56 // We have to dispatch a handler that was registered by a
57 // third-party library.
59 ACE_Sig_Action old_disp;
61 // Make sure this handler executes in the context it was
62 // expecting...
63 this->sa_.register_action (signum, &old_disp);
65 ACE_Sig_Handler_Ex sig_func = ACE_Sig_Handler_Ex (this->sa_.handler ());
67 (*sig_func) (signum, siginfo, ucontext);
68 // Restore the original disposition.
69 old_disp.register_action (signum);
70 break;
72 case ACE_HANDLER:
73 this->eh_->handle_signal (signum, siginfo, ucontext);
74 break;
75 case C_FUNCTION:
76 (*this->sig_func_) (signum, siginfo, ucontext);
77 break;
79 return 0;