~brianaker/libmemcached/1164440

« back to all changes in this revision

Viewing changes to libtest/signal.cc

  • Committer: Continuous Integration
  • Date: 2012-10-22 05:56:09 UTC
  • mfrom: (1086.1.8 libmemcached-1.0)
  • Revision ID: ci@tangent.org-20121022055609-cbooaw9bcdal4qge
Merge lp:~tangent-org/libmemcached/1.0-build Build: jenkins-Libmemcached-1.0-87

Show diffs side-by-side

added added

removed removed

Lines of Context:
94
94
    assert(sigismember(&set, SIGABRT));
95
95
    assert(sigismember(&set, SIGQUIT));
96
96
    assert(sigismember(&set, SIGINT));
 
97
    assert(sigismember(&set, SIGVTALRM));
97
98
  }
98
99
  assert(sigismember(&set, SIGUSR2));
99
100
}
100
101
 
 
102
bool SignalThread::unblock()
 
103
{
 
104
  int error;
 
105
  if ((error= pthread_sigmask(SIG_UNBLOCK, &set, NULL)) != 0)
 
106
  {
 
107
    Error << "While trying to reset signal mask to original set, pthread_sigmask() died during pthread_sigmask(" << strerror(error) << ")";
 
108
    return false;
 
109
  }
 
110
 
 
111
  return true;
 
112
}
 
113
 
101
114
SignalThread::~SignalThread()
102
115
{
103
116
  if (is_shutdown() == false)
114
127
#endif
115
128
  sem_destroy(&lock);
116
129
 
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
 
  }
 
130
  unblock();
122
131
}
123
132
 
124
133
extern "C" {
142
151
 
143
152
    switch (sig)
144
153
    {
 
154
    case SIGVTALRM:
 
155
      Error << "SIGVTALRM was called";
 
156
      context->unblock();
 
157
      raise(SIGVTALRM);
 
158
 
145
159
    case SIGABRT:
146
160
    case SIGUSR2:
147
161
    case SIGINT:
183
197
    sigaddset(&set, SIGABRT);
184
198
    sigaddset(&set, SIGQUIT);
185
199
    sigaddset(&set, SIGINT);
 
200
    sigaddset(&set, SIGVTALRM);
186
201
  }
187
202
  sigaddset(&set, SIGPIPE);
188
203
 
203
218
  {
204
219
    Error << strsignal(SIGQUIT) << " has been previously set.";
205
220
  }
 
221
 
206
222
  if (sigismember(&original_set, SIGINT))
207
223
  {
208
224
    Error << strsignal(SIGINT) << " has been previously set.";
209
225
  }
 
226
 
 
227
  if (sigismember(&original_set, SIGVTALRM))
 
228
  {
 
229
    Error << strsignal(SIGVTALRM) << " has been previously set.";
 
230
  }
 
231
 
210
232
  if (sigismember(&original_set, SIGUSR2))
211
233
  {
212
234
    Error << strsignal(SIGUSR2) << " has been previously set.";