~brianaker/libmemcached/gear-clean

« back to all changes in this revision

Viewing changes to libtest/signal.cc

  • Committer: Brian Aker
  • Date: 2012-09-24 01:36:01 UTC
  • mto: This revision was merged to the branch mainline in revision 1072.
  • Revision ID: brian@tangent.org-20120924013601-4f0zeykol10ka6so
Updates from ddm4

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
 *
35
35
 */
36
36
 
37
 
#include "libtest/yatlcon.h"
 
37
#include <config.h>
38
38
#include <libtest/common.h>
39
39
 
40
40
#include <csignal>
91
91
  assert(magic_memory == MAGIC_MEMORY);
92
92
  if (bool(getenv("LIBTEST_IN_GDB")) == false)
93
93
  {
94
 
    assert(sigismember(&set, SIGALRM));
95
94
    assert(sigismember(&set, SIGABRT));
96
95
    assert(sigismember(&set, SIGQUIT));
97
96
    assert(sigismember(&set, SIGINT));
98
 
    assert(sigismember(&set, SIGVTALRM));
99
97
  }
100
98
  assert(sigismember(&set, SIGUSR2));
101
99
}
102
100
 
103
 
bool SignalThread::unblock()
104
 
{
105
 
  int error;
106
 
  if ((error= pthread_sigmask(SIG_UNBLOCK, &set, NULL)) != 0)
107
 
  {
108
 
    Error << "While trying to reset signal mask to original set, pthread_sigmask() died during pthread_sigmask(" << strerror(error) << ")";
109
 
    return false;
110
 
  }
111
 
 
112
 
  return true;
113
 
}
114
 
 
115
101
SignalThread::~SignalThread()
116
102
{
117
103
  if (is_shutdown() == false)
128
114
#endif
129
115
  sem_destroy(&lock);
130
116
 
131
 
  unblock();
 
117
  int error;
 
118
  if ((error= pthread_sigmask(SIG_UNBLOCK, &set, NULL)) != 0)
 
119
  {
 
120
    Error << "While trying to reset signal mask to original set, pthread_sigmask() died during pthread_sigmask(" << strerror(error) << ")";
 
121
  }
132
122
}
133
123
 
134
124
extern "C" {
152
142
 
153
143
    switch (sig)
154
144
    {
155
 
    case SIGALRM:
156
 
    case SIGVTALRM:
157
 
      Error << strsignal(sig);
158
 
      if (gdb_is_caller())
159
 
      {
160
 
        abort();
161
 
      }
162
 
      exit(EXIT_FAILURE);
163
 
 
164
145
    case SIGABRT:
165
146
    case SIGUSR2:
166
147
    case SIGINT:
199
180
  sigemptyset(&set);
200
181
  if (bool(getenv("LIBTEST_IN_GDB")) == false)
201
182
  {
202
 
    sigaddset(&set, SIGALRM);
203
183
    sigaddset(&set, SIGABRT);
204
184
    sigaddset(&set, SIGQUIT);
205
185
    sigaddset(&set, SIGINT);
206
 
    sigaddset(&set, SIGVTALRM);
207
186
  }
208
187
  sigaddset(&set, SIGPIPE);
209
188
 
224
203
  {
225
204
    Error << strsignal(SIGQUIT) << " has been previously set.";
226
205
  }
227
 
 
228
206
  if (sigismember(&original_set, SIGINT))
229
207
  {
230
208
    Error << strsignal(SIGINT) << " has been previously set.";
231
209
  }
232
 
 
233
 
  if (sigismember(&original_set, SIGVTALRM))
234
 
  {
235
 
    Error << strsignal(SIGVTALRM) << " has been previously set.";
236
 
  }
237
 
 
238
210
  if (sigismember(&original_set, SIGUSR2))
239
211
  {
240
212
    Error << strsignal(SIGUSR2) << " has been previously set.";