Mercurial > hg > nginx-quic
comparison src/os/unix/ngx_process_cycle.c @ 389:537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 13 Jul 2004 17:59:12 +0000 |
parents | 449c4885dcd1 |
children | b670db10cbbd |
comparison
equal
deleted
inserted
replaced
388:80e72c428b39 | 389:537de4dca8ca |
---|---|
304 | 304 |
305 ch.pid = ngx_processes[ngx_process_slot].pid; | 305 ch.pid = ngx_processes[ngx_process_slot].pid; |
306 ch.slot = ngx_process_slot; | 306 ch.slot = ngx_process_slot; |
307 ch.fd = ngx_processes[ngx_process_slot].channel[0]; | 307 ch.fd = ngx_processes[ngx_process_slot].channel[0]; |
308 | 308 |
309 for (i = 0; i < ngx_last_process - 1; i++) { | 309 for (i = 0; i < ngx_last_process; i++) { |
310 | 310 |
311 ngx_log_debug4(NGX_LOG_DEBUG_CORE, cycle->log, 0, | 311 if (i == ngx_process_slot || ngx_processes[i].pid == -1) { |
312 "pass channel s: %d pid:" PID_T_FMT " fd:%d to:" | 312 continue; |
313 PID_T_FMT, ch.slot, ch.pid, ch.fd, ngx_processes[i].pid); | 313 } |
314 | |
315 ngx_log_debug5(NGX_LOG_DEBUG_CORE, cycle->log, 0, | |
316 "pass channel s:%d pid:" PID_T_FMT | |
317 " fd:%d to s:%d pid:" PID_T_FMT, | |
318 ch.slot, ch.pid, ch.fd, | |
319 i, ngx_processes[i].pid); | |
314 | 320 |
315 /* TODO: NGX_AGAIN */ | 321 /* TODO: NGX_AGAIN */ |
316 | 322 |
317 ngx_write_channel(ngx_processes[i].channel[0], | 323 ngx_write_channel(ngx_processes[i].channel[0], |
318 &ch, sizeof(ngx_channel_t), cycle->log); | 324 &ch, sizeof(ngx_channel_t), cycle->log); |
365 ch.fd = -1; | 371 ch.fd = -1; |
366 | 372 |
367 | 373 |
368 for (i = 0; i < ngx_last_process; i++) { | 374 for (i = 0; i < ngx_last_process; i++) { |
369 | 375 |
370 if (ngx_processes[i].detached) { | 376 if (ngx_processes[i].detached || ngx_processes[i].pid == -1) { |
371 continue; | 377 continue; |
372 } | 378 } |
373 | 379 |
374 if (ngx_processes[i].just_respawn) { | 380 if (ngx_processes[i].just_respawn) { |
375 ngx_processes[i].just_respawn = 0; | 381 ngx_processes[i].just_respawn = 0; |
430 ch.fd = -1; | 436 ch.fd = -1; |
431 | 437 |
432 live = 0; | 438 live = 0; |
433 for (i = 0; i < ngx_last_process; i++) { | 439 for (i = 0; i < ngx_last_process; i++) { |
434 | 440 |
435 ngx_log_debug6(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 441 ngx_log_debug7(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
436 "child: " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d", | 442 "child: %d " PID_T_FMT " e:%d t:%d d:%d r:%d j:%d", |
443 i, | |
437 ngx_processes[i].pid, | 444 ngx_processes[i].pid, |
438 ngx_processes[i].exiting, | 445 ngx_processes[i].exiting, |
439 ngx_processes[i].exited, | 446 ngx_processes[i].exited, |
440 ngx_processes[i].detached, | 447 ngx_processes[i].detached, |
441 ngx_processes[i].respawn, | 448 ngx_processes[i].respawn, |
442 ngx_processes[i].just_respawn); | 449 ngx_processes[i].just_respawn); |
443 | 450 |
451 if (ngx_processes[i].pid == -1) { | |
452 continue; | |
453 } | |
454 | |
444 if (ngx_processes[i].exited) { | 455 if (ngx_processes[i].exited) { |
445 | 456 |
446 if (!ngx_processes[i].detached) { | 457 if (!ngx_processes[i].detached) { |
447 ngx_close_channel(ngx_processes[i].channel, cycle->log); | 458 ngx_close_channel(ngx_processes[i].channel, cycle->log); |
448 | 459 |
452 ch.pid = ngx_processes[i].pid; | 463 ch.pid = ngx_processes[i].pid; |
453 ch.slot = i; | 464 ch.slot = i; |
454 | 465 |
455 for (n = 0; n < ngx_last_process; n++) { | 466 for (n = 0; n < ngx_last_process; n++) { |
456 if (ngx_processes[n].exited | 467 if (ngx_processes[n].exited |
468 || ngx_processes[n].pid == -1 | |
457 || ngx_processes[n].channel[0] == -1) | 469 || ngx_processes[n].channel[0] == -1) |
458 { | 470 { |
459 continue; | 471 continue; |
460 } | 472 } |
461 | 473 |
462 ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0, | 474 ngx_log_debug3(NGX_LOG_DEBUG_CORE, cycle->log, 0, |
463 "pass close channel s: %d pid:" PID_T_FMT | 475 "pass close channel s:%d pid:" PID_T_FMT |
464 " to:" PID_T_FMT, ch.slot, ch.pid, ngx_processes[n].pid); | 476 " to:" PID_T_FMT, ch.slot, ch.pid, ngx_processes[n].pid); |
465 | 477 |
466 /* TODO: NGX_AGAIN */ | 478 /* TODO: NGX_AGAIN */ |
467 | 479 |
468 ngx_write_channel(ngx_processes[n].channel[0], | 480 ngx_write_channel(ngx_processes[n].channel[0], |
496 ngx_restart = 1; | 508 ngx_restart = 1; |
497 ngx_noaccepting = 0; | 509 ngx_noaccepting = 0; |
498 } | 510 } |
499 } | 511 } |
500 | 512 |
501 if (i != --ngx_last_process) { | 513 if (i == ngx_last_process - 1) { |
502 ngx_processes[i--] = ngx_processes[ngx_last_process]; | 514 ngx_last_process--; |
515 | |
516 } else { | |
517 ngx_processes[i].pid = -1; | |
503 } | 518 } |
504 | 519 |
505 } else if (ngx_processes[i].exiting || !ngx_processes[i].detached) { | 520 } else if (ngx_processes[i].exiting || !ngx_processes[i].detached) { |
506 live = 1; | 521 live = 1; |
507 } | 522 } |
591 exit(2); | 606 exit(2); |
592 } | 607 } |
593 } | 608 } |
594 } | 609 } |
595 | 610 |
596 for (n = 0; n <= ngx_last_process; n++) { | 611 for (n = 0; n < ngx_last_process; n++) { |
597 | 612 |
598 if (n == ngx_process_slot) { | 613 if (ngx_processes[n].pid == -1) { |
599 if (close(ngx_processes[n].channel[0]) == -1) { | |
600 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
601 "close() failed"); | |
602 } | |
603 | |
604 continue; | 614 continue; |
605 } | 615 } |
606 | 616 |
607 if (close(ngx_processes[n].channel[1]) == -1) { | 617 if (close(ngx_processes[n].channel[1]) == -1) { |
608 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | 618 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
609 "close() failed"); | 619 "close() failed"); |
610 } | 620 } |
621 } | |
622 | |
623 if (close(ngx_processes[ngx_process_slot].channel[0]) == -1) { | |
624 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
625 "close() failed"); | |
611 } | 626 } |
612 | 627 |
613 #if 0 | 628 #if 0 |
614 ngx_last_process = 0; | 629 ngx_last_process = 0; |
615 #endif | 630 #endif |