Changes to attempt to silence bcc64x
[ACE_TAO.git] / ACE / ace / Signal.inl
blob2c130cf6d7db8de84d3c87c0ffb06bdd5e96191d
1 // -*- C++ -*-
2 #include "ace/OS_NS_signal.h"
3 #include "ace/config-all.h"
4 #include "ace/Trace.h"
5 #include "ace/Object_Manager_Base.h"
6 #include "ace/OS_NS_Thread.h"
8 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
10 ACE_INLINE
11 ACE_Sig_Set::ACE_Sig_Set (sigset_t *ss)
12   // : sigset_ ()
14   ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
16   if (ss == nullptr)
17     ACE_OS::sigfillset (&this->sigset_);
18   else
19     // Structure assignment.
20     this->sigset_ = *ss;
23 ACE_INLINE
24 ACE_Sig_Set::ACE_Sig_Set (bool fill)
25   // : sigset_ ()
27   ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
29   if (fill)
30     ACE_OS::sigfillset (&this->sigset_);
31   else
32     ACE_OS::sigemptyset (&this->sigset_);
35 ACE_INLINE
36 ACE_Sig_Set::ACE_Sig_Set (ACE_Sig_Set *ss)
37   // : sigset_ ()
39   ACE_TRACE ("ACE_Sig_Set::ACE_Sig_Set");
41   if (ss == nullptr)
42     ACE_OS::sigfillset (&this->sigset_);
43   else
44     this->sigset_ = ss->sigset_;
47 ACE_INLINE int
48 ACE_Sig_Set::empty_set ()
50   ACE_TRACE ("ACE_Sig_Set::empty_set");
51   return ACE_OS::sigemptyset (&this->sigset_);
54 ACE_INLINE int
55 ACE_Sig_Set::fill_set ()
57   ACE_TRACE ("ACE_Sig_Set::fill_set");
58   return ACE_OS::sigfillset (&this->sigset_);
61 ACE_INLINE int
62 ACE_Sig_Set::sig_add (int signo)
64   ACE_TRACE ("ACE_Sig_Set::sig_add");
65   return ACE_OS::sigaddset (&this->sigset_, signo);
68 ACE_INLINE int
69 ACE_Sig_Set::sig_del (int signo)
71   ACE_TRACE ("ACE_Sig_Set::sig_del");
72   return ACE_OS::sigdelset (&this->sigset_, signo);
75 ACE_INLINE int
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);
82 ACE_INLINE
83 ACE_Sig_Set::operator sigset_t *()
85   ACE_TRACE ("ACE_Sig_Set::operator sigset_t *");
86   return &this->sigset_;
89 ACE_INLINE sigset_t
90 ACE_Sig_Set::sigset () const
92   ACE_TRACE ("ACE_Sig_Set::sigset");
93   return this->sigset_;
96 ACE_INLINE int
97 ACE_Sig_Action::flags ()
99   ACE_TRACE ("ACE_Sig_Action::flags");
100   return this->sa_.sa_flags;
103 ACE_INLINE void
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 ()
113   ACE_TRACE ("ACE_Sig_Action::mask");
114   return &this->sa_.sa_mask;
117 ACE_INLINE void
118 ACE_Sig_Action::mask (sigset_t *ss)
120   ACE_TRACE ("ACE_Sig_Action::mask");
121   if (ss != 0)
122     this->sa_.sa_mask = *ss; // Structure assignment
125 ACE_INLINE void
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 ()
135   ACE_TRACE ("ACE_Sig_Action::handler");
136   return ACE_SignalHandler (this->sa_.sa_handler);
139 ACE_INLINE void
140 ACE_Sig_Action::handler (ACE_SignalHandler handler)
142   ACE_TRACE ("ACE_Sig_Action::handler");
143   this->sa_.sa_handler = ACE_SignalHandlerV (handler);
146 ACE_INLINE void
147 ACE_Sig_Action::set (struct sigaction *sa)
149   ACE_TRACE ("ACE_Sig_Action::set");
150   this->sa_ = *sa; // Structure assignment.
153 ACE_INLINE struct sigaction *
154 ACE_Sig_Action::get ()
156   ACE_TRACE ("ACE_Sig_Action::get");
157   return &this->sa_;
160 ACE_INLINE
161 ACE_Sig_Action::operator struct sigaction * ()
163   ACE_TRACE ("ACE_Sig_Action::operator struct sigaction *");
164   return &this->sa_;
167 ACE_INLINE int
168 ACE_Sig_Action::register_action (int signum, ACE_Sig_Action *oaction)
170   ACE_TRACE ("ACE_Sig_Action::register_action");
171   struct sigaction *sa = oaction == nullptr ? nullptr : oaction->get ();
173   return ACE_OS::sigaction (signum, &this->sa_, sa);
176 ACE_INLINE int
177 ACE_Sig_Action::retrieve_action (int signum)
179   ACE_TRACE ("ACE_Sig_Action::retrieve_action");
180   return ACE_OS::sigaction (signum, 0, &this->sa_);
183 ACE_INLINE int
184 ACE_Sig_Action::restore_action (int signum, ACE_Sig_Action &oaction)
186   ACE_TRACE ("ACE_Sig_Action::restore_action");
187   this->sa_ = *oaction.get (); // Structure assignment
188   return ACE_OS::sigaction (signum, &this->sa_, 0);
191 // Block out the signal MASK until the destructor is called.
193 ACE_INLINE
194 ACE_Sig_Guard::ACE_Sig_Guard (ACE_Sig_Set *mask,
195                               bool condition)
196   : omask_ ()
197   , condition_ (condition)
199   //ACE_TRACE ("ACE_Sig_Guard::ACE_Sig_Guard");
200   if (!this->condition_)
201     return;
203 #if defined (ACE_LACKS_UNIX_SIGNALS)
204   ACE_UNUSED_ARG (mask);
205 #else
206   // If MASK is nullptr then block all signals!
207   if (mask == nullptr)
208     {
209 #  if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK)
210       ACE_OS::sigprocmask (SIG_BLOCK,
211                            ACE_OS_Object_Manager::default_mask (),
212                            (sigset_t *) this->omask_);
213 #  else
214       ACE_OS::thr_sigsetmask (SIG_BLOCK,
215                               ACE_OS_Object_Manager::default_mask (),
216                               (sigset_t *) this->omask_);
217 #  endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */
218     }
219   else
220 #  if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK)
221     ACE_OS::sigprocmask (SIG_BLOCK,
222                          (sigset_t *) *mask,
223                          (sigset_t *)
224                          this->omask_);
225 #  else
226     ACE_OS::thr_sigsetmask (SIG_BLOCK,
227                             (sigset_t *) *mask,
228                             (sigset_t *)
229                             this->omask_);
230 #  endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */
231 #endif /* ACE_LACKS_UNIX_SIGNALS */
234 ACE_END_VERSIONED_NAMESPACE_DECL