#include "ace/Signal.h" #if defined (ACE_HAS_ALLOC_HOOKS) # include "ace/Malloc_Base.h" #endif /* ACE_HAS_ALLOC_HOOKS */ #if !defined (__ACE_INLINE__) #include "ace/Signal.inl" #endif /* __ACE_INLINE__ */ ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_ALLOC_HOOK_DEFINE(ACE_Sig_Action) void ACE_Sig_Action::dump () const { #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_Sig_Action::dump"); #endif /* ACE_HAS_DUMP */ } ACE_ALLOC_HOOK_DEFINE(ACE_Sig_Set) ACE_Sig_Set::~ACE_Sig_Set () { ACE_TRACE ("ACE_Sig_Set::~ACE_Sig_Set"); ACE_OS::sigemptyset (&this->sigset_); } ACE_Sig_Action::~ACE_Sig_Action () { ACE_TRACE ("ACE_Sig_Action::~ACE_Sig_Action"); } /// Restore the signal mask. ACE_Sig_Guard::~ACE_Sig_Guard () { //ACE_TRACE ("ACE_Sig_Guard::~ACE_Sig_Guard"); if (!this->condition_) return; #if !defined (ACE_LACKS_UNIX_SIGNALS) #if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK) ACE_OS::sigprocmask (SIG_SETMASK, (sigset_t *) this->omask_, 0); #else ACE_OS::thr_sigsetmask (SIG_SETMASK, (sigset_t *) this->omask_, 0); #endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */ #endif /* !ACE_LACKS_UNIX_SIGNALS */ } void ACE_Sig_Set::dump () const { #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_Sig_Set::dump"); #endif /* ACE_HAS_DUMP */ } ACE_ALLOC_HOOK_DEFINE(ACE_Sig_Guard) void ACE_Sig_Guard::dump () const { #if defined (ACE_HAS_DUMP) ACE_TRACE ("ACE_Sig_Guard::dump"); #endif /* ACE_HAS_DUMP */ } ACE_Sig_Action::ACE_Sig_Action () { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = 0; // Since Service_Config::signal_handler_ is static and has an // ACE_Sig_Action instance, Win32 will get errno set unless this is // commented out. #if !defined (ACE_WIN32) ACE_OS::sigemptyset (&this->sa_.sa_mask); #endif /* ACE_WIN32 */ this->sa_.sa_handler = 0; } ACE_Sig_Action::ACE_Sig_Action (ACE_SignalHandler sig_handler, sigset_t *sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; if (sig_mask == nullptr) ACE_OS::sigemptyset (&this->sa_.sa_mask); else this->sa_.sa_mask = *sig_mask; // Structure assignment... this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); } ACE_Sig_Action::ACE_Sig_Action (ACE_SignalHandler sig_handler, const ACE_Sig_Set &sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; // Structure assignment... this->sa_.sa_mask = sig_mask.sigset (); this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); } ACE_Sig_Action::ACE_Sig_Action (ACE_SignalHandler sig_handler, int signum, sigset_t *sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; if (sig_mask == nullptr) ACE_OS::sigemptyset (&this->sa_.sa_mask); else this->sa_.sa_mask = *sig_mask; // Structure assignment... this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); ACE_OS::sigaction (signum, &this->sa_, 0); } ACE_Sig_Action::ACE_Sig_Action (ACE_SignalHandler sig_handler, int signum, const ACE_Sig_Set &sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; // Structure assignment... this->sa_.sa_mask = sig_mask.sigset (); this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); ACE_OS::sigaction (signum, &this->sa_, 0); } ACE_Sig_Action::ACE_Sig_Action (const ACE_Sig_Set &signals, ACE_SignalHandler sig_handler, const ACE_Sig_Set &sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; // Structure assignment... this->sa_.sa_mask = sig_mask.sigset (); this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); #if (ACE_NSIG > 0) for (int s = 1; s < ACE_NSIG; s++) if ((signals.is_member (s)) == 1) ACE_OS::sigaction (s, &this->sa_, 0); #else /* ACE_NSIG <= 0 */ ACE_UNUSED_ARG (signals); #endif /* ACE_NSIG <= 0 */ } ACE_Sig_Action::ACE_Sig_Action (const ACE_Sig_Set &signals, ACE_SignalHandler sig_handler, sigset_t *sig_mask, int sig_flags) { // ACE_TRACE ("ACE_Sig_Action::ACE_Sig_Action"); this->sa_.sa_flags = sig_flags; if (sig_mask == 0) ACE_OS::sigemptyset (&this->sa_.sa_mask); else this->sa_.sa_mask = *sig_mask; // Structure assignment... this->sa_.sa_handler = ACE_SignalHandlerV (sig_handler); #if (ACE_NSIG > 0) for (int s = 1; s < ACE_NSIG; s++) if ((signals.is_member (s)) == 1) ACE_OS::sigaction (s, &this->sa_, 0); #else /* ACE_NSIG <= 0 */ ACE_UNUSED_ARG (signals); #endif /* ACE_NSIG <= 0 */ } ACE_END_VERSIONED_NAMESPACE_DECL