comparison src/os/unix/ngx_process_cycle.c @ 322:ab2f8c9a2a45

nginx-0.0.3-2004-04-20-11:00:43 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 20 Apr 2004 07:00:43 +0000
parents 56496082668b
children ba876b26b76d
comparison
equal deleted inserted replaced
321:32847588a82a 322:ab2f8c9a2a45
324 } 324 }
325 325
326 static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo) 326 static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo)
327 { 327 {
328 ngx_uint_t i; 328 ngx_uint_t i;
329 ngx_err_t err;
329 330
330 for (i = 0; i < ngx_last_process; i++) { 331 for (i = 0; i < ngx_last_process; i++) {
331 332
332 if (ngx_processes[i].detached) { 333 if (ngx_processes[i].detached) {
333 continue; 334 continue;
347 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0, 348 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
348 "kill (" PID_T_FMT ", %d)" , 349 "kill (" PID_T_FMT ", %d)" ,
349 ngx_processes[i].pid, signo); 350 ngx_processes[i].pid, signo);
350 351
351 if (kill(ngx_processes[i].pid, signo) == -1) { 352 if (kill(ngx_processes[i].pid, signo) == -1) {
352 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 353 err = ngx_errno;
354 ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
353 "kill(%d, %d) failed", 355 "kill(%d, %d) failed",
354 ngx_processes[i].pid, signo); 356 ngx_processes[i].pid, signo);
357
358 if (err == NGX_ESRCH) {
359 ngx_processes[i].exited = 1;
360 ngx_processes[i].exiting = 0;
361 ngx_reap = 1;
362 }
363
355 continue; 364 continue;
356 } 365 }
357 366
358 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) { 367 if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
359 ngx_processes[i].exiting = 1; 368 ngx_processes[i].exiting = 1;
366 { 375 {
367 ngx_delete_pidfile(cycle); 376 ngx_delete_pidfile(cycle);
368 377
369 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exit"); 378 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exit");
370 379
380 ngx_destroy_pool(cycle->pool);
381
371 exit(0); 382 exit(0);
372 } 383 }
373 384
374 385
375 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) 386 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
376 { 387 {
377 sigset_t set; 388 sigset_t set;
378 ngx_uint_t i; 389 ngx_uint_t i, exiting;
379 ngx_listening_t *ls; 390 ngx_listening_t *ls;
380 ngx_core_conf_t *ccf; 391 ngx_core_conf_t *ccf;
381 #if (NGX_THREADS) 392 #if (NGX_THREADS)
382 ngx_tid_t tid; 393 ngx_tid_t tid;
383 #endif 394 #endif
461 } 472 }
462 } 473 }
463 474
464 #endif 475 #endif
465 476
477 exiting = 0;
478
466 for ( ;; ) { 479 for ( ;; ) {
480 if (exiting && ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
481 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
482 ngx_destroy_pool(cycle->pool);
483 exit(0);
484 }
485
467 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); 486 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
468 487
469 ngx_process_events(cycle); 488 ngx_process_events(cycle);
470 489
471 if (ngx_terminate) { 490 if (ngx_terminate) {
472 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); 491 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
492 ngx_destroy_pool(cycle->pool);
473 exit(0); 493 exit(0);
474 } 494 }
475 495
476 if (ngx_quit) { 496 if (ngx_quit) {
477 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, 497 ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
478 "gracefully shutting down"); 498 "gracefully shutting down");
479 ngx_setproctitle("worker process is shutting down"); 499 ngx_setproctitle("worker process is shutting down");
480 break; 500
481 } 501 if (!exiting) {
482 502 ngx_close_listening_sockets(cycle);
483 if (ngx_reopen) { 503 exiting = 1;
484 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs"); 504 }
485 ngx_reopen_files(cycle, -1); 505 }
486 ngx_reopen = 0;
487 }
488 }
489
490 ngx_close_listening_sockets(cycle);
491
492 for ( ;; ) {
493 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) {
494 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
495 exit(0);
496 }
497
498 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
499
500 ngx_process_events(cycle);
501 506
502 if (ngx_reopen) { 507 if (ngx_reopen) {
503 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs"); 508 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs");
504 ngx_reopen_files(cycle, -1); 509 ngx_reopen_files(cycle, -1);
505 ngx_reopen = 0; 510 ngx_reopen = 0;