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);