1 karl 1.21 //%2005////////////////////////////////////////////////////////////////////////
|
2 kumpf 1.5 //
|
3 karl 1.17 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 karl 1.14 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.17 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.21 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 mike 1.2 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 kumpf 1.5 //
|
19 mike 1.2 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
|
30 kumpf 1.9 // Author: Markus Mueller (markus_mueller@de.ibm.com)
|
31 mike 1.2 //
|
32 kumpf 1.9 // Modified By: Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
33 kumpf 1.10 // : Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
|
34 mike 1.2 //
35 //%/////////////////////////////////////////////////////////////////////////////
36
|
37 kumpf 1.9 #ifndef Pegasus_Signal_h
38 #define Pegasus_Signal_h
|
39 mike 1.2
|
40 kumpf 1.9 #include <Pegasus/Common/Linkage.h>
41 #include <Pegasus/Common/IPC.h>
|
42 mike 1.3
|
43 mike 1.2 // // Ensure Unix 98
44 // #ifdef PEGASUS_PLATFORM_LINUX_IX86_GNU
45 // #ifndef _GNU_SOURCE
46 // #define _GNU_SOURCE
47 // #endif
48 // #else
49 // #ifdef _XOPEN_SOURCE
50 // #undef _XOPEN_SOURCE
51 // #endif
52 // #define _XOPEN_SOURCE 600
53 // #endif
54
|
55 kumpf 1.9 #ifdef PEGASUS_HAS_SIGNALS
56
57 # include <signal.h>
58 typedef siginfo_t PEGASUS_SIGINFO_T;
59 # define PEGASUS_SIGHUP SIGHUP
60 # define PEGASUS_SIGABRT SIGABRT
61 # define PEGASUS_SIGPIPE SIGPIPE
|
62 kumpf 1.13 # define PEGASUS_SIGTERM SIGTERM
|
63 kumpf 1.10 # define PEGASUS_SIGUSR1 SIGUSR1
|
64 kumpf 1.15 # define PEGASUS_SIGCHLD SIGCHLD
|
65 kumpf 1.9
66 #else // PEGASUS_HAS_SIGNALS
67
68 typedef void PEGASUS_SIGINFO_T;
69 # define PEGASUS_SIGHUP 1
70 # define PEGASUS_SIGABRT 11
71 # define PEGASUS_SIGPIPE 13
|
72 kumpf 1.13 # define PEGASUS_SIGTERM 15
|
73 kumpf 1.11 # define PEGASUS_SIGUSR1 16
|
74 kumpf 1.15 # define PEGASUS_SIGCHLD 18
|
75 kumpf 1.9
76 #endif // PEGASUS_HAS_SIGNALS
77
|
78 mike 1.2
|
79 david.dillard 1.16 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || (PEGASUS_OS_SOLARIS)
|
80 sage 1.6 extern "C" {
81 #endif
82
|
83 kumpf 1.9 typedef void (* signal_handler)(int, PEGASUS_SIGINFO_T *, void *);
|
84 sage 1.6
|
85 david.dillard 1.16 #if defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) || (PEGASUS_OS_SOLARIS)
|
86 sage 1.6 }
87 #endif
|
88 mike 1.2
|
89 kumpf 1.9 // Sample signal handler for SIGABRT that stops the failing thread normally
90 void sig_act(int s_n, PEGASUS_SIGINFO_T * s_info, void * sig);
|
91 mike 1.2
92 PEGASUS_NAMESPACE_BEGIN
93
94 class PEGASUS_COMMON_LINKAGE SignalHandler
95 {
|
96 david.dillard 1.18 public:
97 SignalHandler();
|
98 mike 1.2
|
99 david.dillard 1.18 ~SignalHandler(); // deactivate all registered handlers
|
100 mike 1.2
|
101 david.dillard 1.18 // these functions should throw exceptions
|
102 mike 1.2
|
103 david.dillard 1.20 void registerHandler(unsigned signum, signal_handler _sighandler);
|
104 mike 1.2
|
105 david.dillard 1.20 void activate(unsigned signum);
|
106 mike 1.2
|
107 david.dillard 1.18 //void activateAll();
|
108 mike 1.2
|
109 david.dillard 1.20 void deactivate(unsigned signum);
|
110 mike 1.2
|
111 david.dillard 1.18 void deactivateAll();
|
112 mike 1.2
|
113 david.dillard 1.20 static void ignore(unsigned signum);
|
114 mike 1.2
|
115 david.dillard 1.18 private:
|
116 mike 1.2
|
117 kumpf 1.9 #ifdef PEGASUS_HAS_SIGNALS
|
118 david.dillard 1.20 enum
119 {
120 PEGASUS_NSIG = 32
121 };
122
123 static void verifySignum(unsigned signum);
|
124 kumpf 1.9
|
125 david.dillard 1.18 typedef struct {
126 int signum;
127 int active;
128 signal_handler sh;
129 struct sigaction oldsa;
130 } register_handler;
|
131 mike 1.2
|
132 david.dillard 1.18 register_handler reg_handler[PEGASUS_NSIG + 1];
133 Mutex reg_mutex;
134
|
135 david.dillard 1.19 void deactivate_i(register_handler &rh);
|
136 david.dillard 1.18
|
137 david.dillard 1.20 register_handler &getHandler(unsigned sigum);
|
138 kumpf 1.9 #endif
|
139 mike 1.2
140 };
141
|
142 kumpf 1.12 PEGASUS_COMMON_LINKAGE SignalHandler * getSigHandle();
|
143 mike 1.2
144 PEGASUS_NAMESPACE_END
145
|
146 kumpf 1.9 #endif // Pegasus_Signal_h
|