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