comparison src/core/nginx.c @ 224:d427f1c3fe95

nginx-0.0.1-2004-01-13-09:39:14 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 13 Jan 2004 06:39:14 +0000
parents 5d168ebc1ecc
children 2e9a8a14a0cf
comparison
equal deleted inserted replaced
223:5d168ebc1ecc 224:d427f1c3fe95
228 } 228 }
229 229
230 230
231 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx) 231 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
232 { 232 {
233 int signo;
233 ngx_msec_t delay; 234 ngx_msec_t delay;
234 struct timeval tv; 235 struct timeval tv;
235 ngx_uint_t i, live; 236 ngx_uint_t i, live, first;
236 sigset_t set, wset; 237 sigset_t set, wset;
237 238
238 delay = 125; 239 delay = 125;
239 240
240 sigemptyset(&set); 241 sigemptyset(&set);
275 276
276 /* a cycle with the same configuration */ 277 /* a cycle with the same configuration */
277 278
278 for ( ;; ) { 279 for ( ;; ) {
279 280
281 signo = 0;
282 first = 1;
283
280 /* an event loop */ 284 /* an event loop */
281 285
282 for ( ;; ) { 286 for ( ;; ) {
283 287
284 if (ngx_process == NGX_PROCESS_MASTER) { 288 if (ngx_process == NGX_PROCESS_MASTER) {
297 || ngx_process == NGX_PROCESS_PAUSED) 301 || ngx_process == NGX_PROCESS_PAUSED)
298 { 302 {
299 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 303 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
300 "quit cycle"); 304 "quit cycle");
301 305
302 if (delay < 15000) {
303 delay *= 2;
304 }
305
306 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) { 306 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) {
307 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 307 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
308 "sigprocmask() failed"); 308 "sigprocmask() failed");
309 continue; 309 continue;
310 } 310 }
311 311
312 if (ngx_reap == 0) { 312 if (ngx_reap == 0) {
313
314 if (delay < 15000) {
315 delay *= 2;
316 }
317
313 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 318 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
314 "sleep %d", delay / 1000); 319 "msleep %d", delay);
315 320
316 ngx_msleep(delay); 321 ngx_msleep(delay);
317 322
318 ngx_gettimeofday(&tv); 323 ngx_gettimeofday(&tv);
319 ngx_time_update(tv.tv_sec); 324 ngx_time_update(tv.tv_sec);
367 } 372 }
368 } 373 }
369 374
370 if (ngx_terminate) { 375 if (ngx_terminate) {
371 if (delay > 10000) { 376 if (delay > 10000) {
372 ngx_signal_processes(cycle, SIGKILL); 377 signo = SIGKILL;
373 } else { 378 } else {
374 ngx_signal_processes(cycle, 379 signo = ngx_signal_value(NGX_TERMINATE_SIGNAL);
375 ngx_signal_value(NGX_TERMINATE_SIGNAL));
376 } 380 }
377 ngx_process = NGX_PROCESS_QUITING; 381 ngx_process = NGX_PROCESS_QUITING;
378 } 382 }
379 383
380 if (ngx_quit) { 384 if (ngx_quit) {
381 ngx_signal_processes(cycle, 385 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
382 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
383 ngx_process = NGX_PROCESS_QUITING; 386 ngx_process = NGX_PROCESS_QUITING;
384 } 387 }
385 388
386 if (ngx_pause) { 389 if (ngx_pause) {
387 ngx_signal_processes(cycle, 390 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
388 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
389 ngx_process = NGX_PROCESS_PAUSED; 391 ngx_process = NGX_PROCESS_PAUSED;
390 } 392 }
391 393
392 if (ngx_reap) { 394 if (ngx_reap) {
393 ngx_reap = 0; 395 ngx_reap = 0;
400 "changing binary"); 402 "changing binary");
401 ngx_exec_new_binary(cycle, ctx->argv); 403 ngx_exec_new_binary(cycle, ctx->argv);
402 } 404 }
403 405
404 if (ngx_reconfigure) { 406 if (ngx_reconfigure) {
407 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
405 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring"); 408 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring");
406 break;
407 } 409 }
408 410
409 if (ngx_reopen) { 411 if (ngx_reopen) {
412 signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
410 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, 413 ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
411 "reopening logs"); 414 "reopening logs");
412 ngx_reopen_files(cycle); 415 ngx_reopen_files(cycle);
413 ngx_reopen = 0; 416 ngx_reopen = 0;
414 } 417 }
415 418
416 if (first) { 419 if (signo) {
417 for (i = 0; i < ngx_last_process; i++) { 420 if (first) {
418 if (!ngx_processes[i].detached) { 421 for (i = 0; i < ngx_last_process; i++) {
419 ngx_processes[i].signal = 1; 422 if (!ngx_processes[i].detached) {
423 ngx_processes[i].signal = 1;
424 }
420 } 425 }
426 first = 0;
427 delay = 125;
421 } 428 }
422 first = 1; 429
423 } 430 ngx_signal_processes(cycle, signo);
424 431 }
432
433 if (ngx_reconfigure) {
434 break;
435 }
425 } 436 }
426 437
427 if (ngx_process == NGX_PROCESS_PAUSED) { 438 if (ngx_process == NGX_PROCESS_PAUSED) {
428 ngx_process = NGX_PROCESS_MASTER; 439 ngx_process = NGX_PROCESS_MASTER;
429 440