Mercurial > hg > nginx-quic
comparison src/core/nginx.c @ 237:8d5cce3ae221
nginx-0.0.1-2004-01-22-20:10:46 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 22 Jan 2004 17:10:46 +0000 |
parents | 86e473b5641e |
children | 674f85a4d00f |
comparison
equal
deleted
inserted
replaced
236:86e473b5641e | 237:8d5cce3ae221 |
---|---|
231 { | 231 { |
232 int signo; | 232 int signo; |
233 char *name; | 233 char *name; |
234 sigset_t set, wset; | 234 sigset_t set, wset; |
235 struct timeval tv; | 235 struct timeval tv; |
236 ngx_uint_t i, live, sent; | 236 ngx_uint_t i, live; |
237 ngx_msec_t delay; | 237 ngx_msec_t delay; |
238 ngx_core_conf_t *ccf; | 238 ngx_core_conf_t *ccf; |
239 | |
240 delay = 125; | |
241 | 239 |
242 sigemptyset(&set); | 240 sigemptyset(&set); |
243 sigaddset(&set, SIGCHLD); | 241 sigaddset(&set, SIGCHLD); |
244 sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL)); | 242 sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL)); |
245 sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL)); | 243 sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL)); |
253 if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) { | 251 if (sigprocmask(SIG_BLOCK, &set, NULL) == -1) { |
254 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 252 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
255 "sigprocmask() failed"); | 253 "sigprocmask() failed"); |
256 } | 254 } |
257 | 255 |
256 ngx_setproctitle("master process"); | |
257 | |
258 ngx_signal = 0; | 258 ngx_signal = 0; |
259 ngx_new_binary = 0; | 259 ngx_new_binary = 0; |
260 delay = 0; | |
260 signo = 0; | 261 signo = 0; |
261 sent = 0; | |
262 live = 0; | 262 live = 0; |
263 | 263 |
264 for ( ;; ) { | 264 for ( ;; ) { |
265 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "new cycle"); | 265 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "new cycle"); |
266 | 266 |
292 /* an event loop */ | 292 /* an event loop */ |
293 | 293 |
294 for ( ;; ) { | 294 for ( ;; ) { |
295 | 295 |
296 if (ngx_process == NGX_PROCESS_MASTER) { | 296 if (ngx_process == NGX_PROCESS_MASTER) { |
297 if (sent) { | 297 if (delay) { |
298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 298 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
299 "sent signal cycle"); | 299 "temination cycle"); |
300 | 300 |
301 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) { | 301 if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) { |
302 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 302 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
303 "sigprocmask() failed"); | 303 "sigprocmask() failed"); |
304 continue; | 304 continue; |
309 * would be delivered right on the sigprocmask() return | 309 * would be delivered right on the sigprocmask() return |
310 */ | 310 */ |
311 | 311 |
312 if (!ngx_signal) { | 312 if (!ngx_signal) { |
313 | 313 |
314 if (delay < 15000) { | 314 delay *= 2; |
315 delay *= 2; | |
316 } | |
317 | 315 |
318 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 316 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
319 "msleep %d", delay); | 317 "msleep %d", delay); |
320 | 318 |
321 ngx_msleep(delay); | 319 ngx_msleep(delay); |
356 } | 354 } |
357 | 355 |
358 if (ngx_reap) { | 356 if (ngx_reap) { |
359 ngx_reap = 0; | 357 ngx_reap = 0; |
360 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 358 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
361 | |
362 "reap childs"); | 359 "reap childs"); |
363 | 360 |
364 live = 0; | 361 live = 0; |
365 for (i = 0; i < ngx_last_process; i++) { | 362 for (i = 0; i < ngx_last_process; i++) { |
366 | 363 |
411 | 408 |
412 } else if (ngx_processes[i].exiting) { | 409 } else if (ngx_processes[i].exiting) { |
413 live = 1; | 410 live = 1; |
414 } | 411 } |
415 } | 412 } |
416 | |
417 if (!live) { | |
418 sent = 0; | |
419 } | |
420 } | 413 } |
421 | 414 |
422 if (!live && (ngx_terminate || ngx_quit)) { | 415 if (!live && (ngx_terminate || ngx_quit)) { |
423 ngx_master_exit(cycle, ctx); | 416 ngx_master_exit(cycle, ctx); |
424 } | 417 } |
425 | 418 |
426 if (ngx_terminate) { | 419 if (ngx_terminate) { |
427 if (delay > 10000) { | 420 if (delay == 0) { |
421 delay = 50; | |
422 } | |
423 | |
424 if (delay > 1000) { | |
428 signo = SIGKILL; | 425 signo = SIGKILL; |
429 } else { | 426 } else { |
430 signo = ngx_signal_value(NGX_TERMINATE_SIGNAL); | 427 signo = ngx_signal_value(NGX_TERMINATE_SIGNAL); |
431 } | 428 } |
432 | 429 |
465 ngx_reopen = 0; | 462 ngx_reopen = 0; |
466 } | 463 } |
467 | 464 |
468 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, | 465 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, |
469 "reopening logs"); | 466 "reopening logs"); |
470 ngx_reopen_files(cycle); | 467 ngx_reopen_files(cycle, |
468 ccf->worker_reopen > 0 ? ccf->user : -1); | |
471 } | 469 } |
472 } | 470 } |
473 | 471 |
474 if (signo) { | 472 if (signo) { |
475 for (i = 0; i < ngx_last_process; i++) { | 473 for (i = 0; i < ngx_last_process; i++) { |
481 cycle->log, 0, | 479 cycle->log, 0, |
482 "signal " PID_T_FMT " %d", | 480 "signal " PID_T_FMT " %d", |
483 ngx_processes[i].pid, signo); | 481 ngx_processes[i].pid, signo); |
484 } | 482 } |
485 } | 483 } |
486 delay = 125; | |
487 signo = 0; | 484 signo = 0; |
488 } | 485 } |
489 | 486 |
490 for (i = 0; i < ngx_last_process; i++) { | 487 for (i = 0; i < ngx_last_process; i++) { |
491 | 488 |
509 } | 506 } |
510 | 507 |
511 if (ngx_processes[i].signal | 508 if (ngx_processes[i].signal |
512 != ngx_signal_value(NGX_REOPEN_SIGNAL)) | 509 != ngx_signal_value(NGX_REOPEN_SIGNAL)) |
513 { | 510 { |
514 sent = 1; | |
515 ngx_processes[i].exiting = 1; | 511 ngx_processes[i].exiting = 1; |
516 } | 512 } |
517 } | 513 } |
518 | 514 |
519 if (ngx_reopen || ngx_reconfigure) { | 515 if (ngx_reopen || ngx_reconfigure) { |
621 exit(1); | 617 exit(1); |
622 } | 618 } |
623 } | 619 } |
624 } | 620 } |
625 | 621 |
622 ngx_setproctitle("worker process"); | |
623 | |
626 /* TODO: threads: start ngx_worker_thread_cycle() */ | 624 /* TODO: threads: start ngx_worker_thread_cycle() */ |
627 | 625 |
628 for ( ;; ) { | 626 for ( ;; ) { |
629 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); | 627 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); |
630 | 628 |
636 } | 634 } |
637 | 635 |
638 if (ngx_quit) { | 636 if (ngx_quit) { |
639 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, | 637 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, |
640 "gracefully shutdowning"); | 638 "gracefully shutdowning"); |
639 ngx_setproctitle("worker process is shutdowning"); | |
641 break; | 640 break; |
642 } | 641 } |
643 | 642 |
644 if (ngx_reopen) { | 643 if (ngx_reopen) { |
645 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs"); | 644 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs"); |
646 ngx_reopen_files(cycle); | 645 ngx_reopen_files(cycle, -1); |
647 ngx_reopen = 0; | 646 ngx_reopen = 0; |
648 } | 647 } |
649 } | 648 } |
650 | 649 |
651 ngx_close_listening_sockets(cycle); | 650 ngx_close_listening_sockets(cycle); |