2 #include "ace/OS_NS_signal.h"
3 #include "ace/config-all.h"
5 #include "ace/Object_Manager_Base.h"
6 #include "ace/OS_NS_Thread.h"
8 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
11 ACE_Sig_Set::ACE_Sig_Set (sigset_t *ss)
14 ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
17 ACE_OS::sigfillset (&this->sigset_);
19 // Structure assignment.
24 ACE_Sig_Set::ACE_Sig_Set (int fill)
27 ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
30 ACE_OS::sigfillset (&this->sigset_);
32 ACE_OS::sigemptyset (&this->sigset_);
36 ACE_Sig_Set::ACE_Sig_Set (ACE_Sig_Set *ss)
39 ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
42 ACE_OS::sigfillset (&this->sigset_);
44 this->sigset_ = ss->sigset_;
48 ACE_Sig_Set::empty_set (void)
50 ACE_TRACE ("ACE_Sig_Set::empty_set");
51 return ACE_OS::sigemptyset (&this->sigset_);
55 ACE_Sig_Set::fill_set (void)
57 ACE_TRACE ("ACE_Sig_Set::fill_set");
58 return ACE_OS::sigfillset (&this->sigset_);
62 ACE_Sig_Set::sig_add (int signo)
64 ACE_TRACE ("ACE_Sig_Set::sig_add");
65 return ACE_OS::sigaddset (&this->sigset_, signo);
69 ACE_Sig_Set::sig_del (int signo)
71 ACE_TRACE ("ACE_Sig_Set::sig_del");
72 return ACE_OS::sigdelset (&this->sigset_, signo);
76 ACE_Sig_Set::is_member (int signo) const
78 ACE_TRACE ("ACE_Sig_Set::is_member");
79 return ACE_OS::sigismember (const_cast<sigset_t *> (&this->sigset_), signo);
83 ACE_Sig_Set::operator sigset_t *(void)
85 ACE_TRACE ("ACE_Sig_Set::operator sigset_t *");
86 return &this->sigset_;
90 ACE_Sig_Set::sigset (void) const
92 ACE_TRACE ("ACE_Sig_Set::sigset");
97 ACE_Sig_Action::flags (void)
99 ACE_TRACE ("ACE_Sig_Action::flags");
100 return this->sa_.sa_flags;
104 ACE_Sig_Action::flags (int flags)
106 ACE_TRACE ("ACE_Sig_Action::flags");
107 this->sa_.sa_flags = flags;
110 ACE_INLINE sigset_t *
111 ACE_Sig_Action::mask (void)
113 ACE_TRACE ("ACE_Sig_Action::mask");
114 return &this->sa_.sa_mask;
118 ACE_Sig_Action::mask (sigset_t *ss)
120 ACE_TRACE ("ACE_Sig_Action::mask");
122 this->sa_.sa_mask = *ss; // Structure assignment
126 ACE_Sig_Action::mask (ACE_Sig_Set &ss)
128 ACE_TRACE ("ACE_Sig_Action::mask");
129 this->sa_.sa_mask = ss.sigset (); // Structure assignment
132 ACE_INLINE ACE_SignalHandler
133 ACE_Sig_Action::handler (void)
135 ACE_TRACE ("ACE_Sig_Action::handler");
136 return ACE_SignalHandler (this->sa_.sa_handler);
140 ACE_Sig_Action::handler (ACE_SignalHandler handler)
142 ACE_TRACE ("ACE_Sig_Action::handler");
143 #if !defined(ACE_HAS_TANDEM_SIGNALS)
144 this->sa_.sa_handler = ACE_SignalHandlerV (handler);
146 this->sa_.sa_handler = (void (*)()) ACE_SignalHandlerV (handler);
147 #endif /* !ACE_HAS_TANDEM_SIGNALS */
151 ACE_Sig_Action::set (struct sigaction *sa)
153 ACE_TRACE ("ACE_Sig_Action::set");
154 this->sa_ = *sa; // Structure assignment.
157 ACE_INLINE struct sigaction *
158 ACE_Sig_Action::get (void)
160 ACE_TRACE ("ACE_Sig_Action::get");
165 ACE_Sig_Action::operator struct sigaction * ()
167 ACE_TRACE ("ACE_Sig_Action::operator struct sigaction *");
172 ACE_Sig_Action::register_action (int signum, ACE_Sig_Action *oaction)
174 ACE_TRACE ("ACE_Sig_Action::register_action");
175 struct sigaction *sa = oaction == 0 ? 0 : oaction->get ();
177 return ACE_OS::sigaction (signum, &this->sa_, sa);
181 ACE_Sig_Action::retrieve_action (int signum)
183 ACE_TRACE ("ACE_Sig_Action::retrieve_action");
184 return ACE_OS::sigaction (signum, 0, &this->sa_);
188 ACE_Sig_Action::restore_action (int signum, ACE_Sig_Action &oaction)
190 ACE_TRACE ("ACE_Sig_Action::restore_action");
191 this->sa_ = *oaction.get (); // Structure assignment
192 return ACE_OS::sigaction (signum, &this->sa_, 0);
195 // Block out the signal MASK until the destructor is called.
198 ACE_Sig_Guard::ACE_Sig_Guard (ACE_Sig_Set *mask,
201 , condition_ (condition)
203 //ACE_TRACE ("ACE_Sig_Guard::ACE_Sig_Guard");
204 if (!this->condition_)
207 #if defined (ACE_LACKS_UNIX_SIGNALS)
208 ACE_UNUSED_ARG (mask);
210 // If MASK is 0 then block all signals!
213 # if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK)
214 ACE_OS::sigprocmask (SIG_BLOCK,
215 ACE_OS_Object_Manager::default_mask (),
216 (sigset_t *) this->omask_);
218 ACE_OS::thr_sigsetmask (SIG_BLOCK,
219 ACE_OS_Object_Manager::default_mask (),
220 (sigset_t *) this->omask_);
221 # endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */
224 # if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK)
225 ACE_OS::sigprocmask (SIG_BLOCK,
230 ACE_OS::thr_sigsetmask (SIG_BLOCK,
234 # endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */
235 #endif /* ACE_LACKS_UNIX_SIGNALS */
238 ACE_END_VERSIONED_NAMESPACE_DECL