~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/signal_handler/signal_handler.cc

  • Committer: Mark Atwood
  • Date: 2011-08-21 06:56:57 UTC
  • mfrom: (2385.3.34 rf)
  • Revision ID: me@mark.atwood.name-20110821065657-vk2at03z9u17mf1d
mergeĀ lp:~olafvdspek/drizzle/refactor7

Show diffs side-by-side

added added

removed removed

Lines of Context:
36
36
#include <sys/stat.h>
37
37
#include <fcntl.h>
38
38
 
39
 
 
40
39
static bool kill_in_progress= false;
41
40
void signal_hand(void);
42
41
 
43
 
namespace drizzled
44
 
{
 
42
namespace drizzled {
 
43
 
45
44
extern int cleanup_done;
46
45
extern bool volatile abort_loop;
47
46
extern bool volatile shutdown_in_progress;
172
171
 
173
172
  for (;;)
174
173
  {
175
 
    int error;                                  // Used when debugging
176
 
 
177
 
    if (shutdown_in_progress && !abort_loop)
 
174
    if (shutdown_in_progress && not abort_loop)
178
175
    {
179
176
      sig= SIGTERM;
180
 
      error=0;
181
177
    }
182
178
    else
183
179
    {
184
 
      while ((error= sigwait(&set, &sig)) == EINTR) ;
 
180
      while (sigwait(&set, &sig) == EINTR) 
 
181
      {
 
182
      }
185
183
    }
186
184
 
187
185
    if (cleanup_done)
188
186
    {
189
187
      signal_thread_in_use= false;
190
 
 
191
188
      return;
192
189
    }
193
 
    switch (sig) {
 
190
    switch (sig) 
 
191
    {
194
192
    case SIGTERM:
195
193
    case SIGQUIT:
196
194
    case SIGKILL:
198
196
      /* switch to the old log message processing */
199
197
      if (!abort_loop)
200
198
      {
201
 
        abort_loop=1;                           // mark abort for threads
 
199
        abort_loop= 1;                          // mark abort for threads
202
200
        kill_server(sig);               // MIT THREAD has a alarm thread
203
201
      }
204
202
      break;
205
203
    case SIGHUP:
206
 
      if (!abort_loop)
 
204
      if (not abort_loop)
207
205
      {
208
206
        g_refresh_version++;
209
207
        drizzled::plugin::StorageEngine::flushLogs(NULL);
210
208
      }
211
209
      break;
212
 
    default:
213
 
      break;
214
210
    }
215
211
  }
216
212
}
250
246
    uint32_t count= 2; // How many times to try join and see if the caller died.
251
247
    while (not completed and count--)
252
248
    {
253
 
      int error;
254
249
      int signal= count == 1 ? SIGTSTP : SIGTERM;
255
250
      
256
 
      if ((error= pthread_kill(thread.native_handle(), signal)))
 
251
      if (int error= pthread_kill(thread.native_handle(), signal))
257
252
      {
258
253
        char buffer[1024]; // No reason for number;
259
254
        strerror_r(error, buffer, sizeof(buffer));