summaryrefslogtreecommitdiff
path: root/ACE/ace/OS_NS_signal.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/OS_NS_signal.h')
-rw-r--r--ACE/ace/OS_NS_signal.h233
1 files changed, 233 insertions, 0 deletions
diff --git a/ACE/ace/OS_NS_signal.h b/ACE/ace/OS_NS_signal.h
new file mode 100644
index 00000000000..e7eeb96fc83
--- /dev/null
+++ b/ACE/ace/OS_NS_signal.h
@@ -0,0 +1,233 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file OS_NS_signal.h
+ *
+ * $Id$
+ *
+ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
+ * @author Jesper S. M|ller<stophph@diku.dk>
+ * @author and a cast of thousands...
+ *
+ * Originally in OS.h.
+ */
+//=============================================================================
+
+#ifndef ACE_OS_NS_SIGNAL_H
+# define ACE_OS_NS_SIGNAL_H
+
+# include /**/ "ace/pre.h"
+
+# include "ace/config-lite.h"
+
+# if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+# endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/os_include/os_signal.h"
+#include /**/ "ace/ACE_export.h"
+
+#if defined (ACE_EXPORT_MACRO)
+# undef ACE_EXPORT_MACRO
+#endif
+#define ACE_EXPORT_MACRO ACE_Export
+
+#if defined (__Lynx__) || defined (__OpenBSD__)
+// LynxOS and OpenBSD define pthread_sigmask() in pthread.h
+# include "ace/os_include/os_pthread.h"
+#endif /* __Lynx__ || OpenBSD */
+
+/*
+ * We inline and undef some functions that may be implemented
+ * as macros on some platforms. This way macro definitions will
+ * be usable later as there is no way to save the macro definition
+ * using the pre-processor.
+ *
+ */
+
+#if !defined (ACE_LACKS_SIGSET)
+inline int ace_sigemptyset_helper (sigset_t *s)
+{
+# if defined (sigemptyset)
+ return sigemptyset (s);
+# undef sigemptyset
+# else
+ return ACE_STD_NAMESPACE::sigemptyset (s);
+# endif /* defined (sigemptyset) */
+}
+
+inline int ace_sigfillset_helper (sigset_t *s)
+{
+# if defined (sigfillset)
+ return sigfillset (s);
+# undef sigfillset
+# else
+ return ACE_STD_NAMESPACE::sigfillset (s);
+# endif /* defined (sigfillset) */
+}
+
+inline int ace_sigaddset_helper (sigset_t *s, int signum)
+{
+# if defined (sigaddset)
+ return sigaddset (s, signum);
+# undef sigaddset
+# else
+ return ACE_STD_NAMESPACE::sigaddset (s, signum);
+# endif /* defined (sigaddset) */
+}
+
+inline int ace_sigdelset_helper (sigset_t *s, int signum)
+{
+# if defined (sigdelset)
+ return sigdelset (s, signum);
+# undef sigdelset
+# else
+ return ACE_STD_NAMESPACE::sigdelset (s, signum);
+# endif /* defined (sigdelset) */
+}
+
+inline int ace_sigismember_helper (sigset_t *s, int signum)
+{
+# if defined (sigismember)
+ return sigismember (s, signum);
+# undef sigismember
+# else
+ return ACE_STD_NAMESPACE::sigismember (s, signum);
+# endif /* defined (sigismember) */
+}
+#endif /* !defined (ACE_LACKS_SIGSET) */
+
+#if defined (ACE_HAS_SIGSUSPEND)
+inline int ace_sigsuspend_helper (const sigset_t *s)
+{
+# if defined (sigsuspend)
+ return sigsuspend (s);
+# undef sigsuspend
+# else
+ return ACE_STD_NAMESPACE::sigsuspend (s);
+# endif /* defined (sigsuspen) */
+}
+#endif /* ACE_HAS_SIGSUSPEND */
+
+
+# if !defined (SIG_BLOCK)
+# define SIG_BLOCK 1
+# endif /* SIG_BLOCK */
+
+# if !defined (SIG_UNBLOCK)
+# define SIG_UNBLOCK 2
+# endif /* SIG_UNBLOCK */
+
+# if !defined (SIG_SETMASK)
+# define SIG_SETMASK 3
+# endif /* SIG_SETMASK */
+
+// Create some useful typedefs.
+
+# if !defined (ACE_HAS_SIGINFO_T)
+struct ACE_Export siginfo_t
+{
+ siginfo_t (ACE_HANDLE handle);
+ siginfo_t (ACE_HANDLE *handles); // JCEJ 12/23/96
+
+ /// Win32 HANDLE that has become signaled.
+ ACE_HANDLE si_handle_;
+
+ /// Array of Win32 HANDLEs all of which have become signaled.
+ ACE_HANDLE *si_handles_;
+};
+# endif /* ACE_HAS_SIGINFO_T */
+
+#if !defined (ACE_WIN32)
+extern "C"
+{
+ typedef void (*ACE_SIGNAL_C_FUNC)(int, siginfo_t *, void *);
+}
+#endif /* ACE_WIN32 */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// This hack is needed to get around an odd and hard-to-reproduce problem
+// with HP aC++. If struct sigaction is defined extern "C" and the sigaction
+// function in namespace ACE_OS, the compiler sometimes gets confused.
+// If we help it with this typedef, it's fine. User code should not use
+// the ACE typedef - it will be removed without warning as soon as we can
+// either drop support for the broken compilers or figure out how to reproduce
+// it so it can be reported to HP and fixed.
+// There's a similar hack in OS_TLI.h for struct t_optmgmt.
+// Also see ChangeLog entries:
+// Mon Jan 23 16:35:40 UTC 2006 Steve Huston <shuston@riverace.com>
+// Mon Jan 23 22:08:56 UTC 2006 Steve Huston <shuston@riverace.com>
+#if defined (__HP_aCC) && (__HP_aCC <= 37300)
+typedef extern "C" struct sigaction ACE_SIGACTION;
+#else
+typedef struct sigaction ACE_SIGACTION;
+#endif
+
+namespace ACE_OS {
+
+ //@{ @name A set of wrappers for Signals.
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int kill (pid_t pid,
+ int signum);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int pthread_sigmask (int how,
+ const sigset_t *nsp,
+ sigset_t *osp);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigaction (int signum,
+ const ACE_SIGACTION *nsa,
+ ACE_SIGACTION *osa);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigaddset (sigset_t *s,
+ int signum);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigdelset (sigset_t *s,
+ int signum);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigemptyset (sigset_t *s);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigfillset (sigset_t *s);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigismember (sigset_t *s,
+ int signum);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ ACE_SignalHandler signal (int signum,
+ ACE_SignalHandler);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigprocmask (int how,
+ const sigset_t *nsp,
+ sigset_t *osp);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int sigsuspend (const sigset_t *s);
+
+ ACE_NAMESPACE_INLINE_FUNCTION
+ int raise (const int signum);
+ //@}
+
+} /* namespace ACE_OS */
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+# if defined (ACE_HAS_INLINED_OSCALLS)
+# if defined (ACE_INLINE)
+# undef ACE_INLINE
+# endif /* ACE_INLINE */
+# define ACE_INLINE inline
+# include "ace/OS_NS_signal.inl"
+# endif /* ACE_HAS_INLINED_OSCALLS */
+
+# include /**/ "ace/post.h"
+#endif /* ACE_OS_NS_SIGNAL_H */