comparison src/event/modules/ngx_rtsig_module.c @ 402:f209f3391020

nginx-0.0.9-2004-07-28-20:16:50 import
author Igor Sysoev <igor@sysoev.ru>
date Wed, 28 Jul 2004 16:16:50 +0000
parents b670db10cbbd
children da8c5707af39
comparison
equal deleted inserted replaced
401:b32ca005e025 402:f209f3391020
624 err = ngx_errno; 624 err = ngx_errno;
625 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, 625 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT,
626 cycle->log, 0, 626 cycle->log, 0,
627 "poll() failed while the overflow recover"); 627 "poll() failed while the overflow recover");
628 628
629 if (err != NGX_EINTR) { 629 if (err == NGX_EINTR) {
630 break; 630 continue;
631 } 631 }
632 } 632 }
633
634 break;
633 } 635 }
634 636
635 if (ready <= 0) { 637 if (ready <= 0) {
636 continue; 638 continue;
637 } 639 }
638 640
639 if (n) { 641 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) {
640 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { 642 return NGX_ERROR;
641 return NGX_ERROR;
642 }
643 } 643 }
644 644
645 for (i = 0; i < n; i++) { 645 for (i = 0; i < n; i++) {
646 c = &cycle->connections[overflow_list[i].fd]; 646 c = &cycle->connections[overflow_list[i].fd];
647 647
684 wev->event_handler(wev); 684 wev->event_handler(wev);
685 } 685 }
686 } 686 }
687 } 687 }
688 688
689 if (n) { 689 ngx_mutex_unlock(ngx_posted_events_mutex);
690 ngx_mutex_unlock(ngx_posted_events_mutex);
691 }
692 690
693 if (tested >= rtscf->overflow_test) { 691 if (tested >= rtscf->overflow_test) {
694 692
695 if (ngx_linux_rtsig_max) { 693 if (ngx_linux_rtsig_max) {
696 694
721 "sysctl(KERN_RTSIGNR) failed"); 719 "sysctl(KERN_RTSIGNR) failed");
722 return NGX_ERROR; 720 return NGX_ERROR;
723 } 721 }
724 722
725 /* 723 /*
726 * drain rt signal queue if the /proc/sys/kernel/rtsig-nr 724 * drain the rt signal queue if the /proc/sys/kernel/rtsig-nr
727 * is bigger than 725 * is bigger than
728 * /proc/sys/kernel/rtsig-max / rtsig_overflow_threshold 726 * /proc/sys/kernel/rtsig-max / rtsig_overflow_threshold
729 */ 727 */
730 728
731 if (rtsig_max / rtscf->overflow_threshold < rtsig_nr) { 729 if (rtsig_max / rtscf->overflow_threshold < rtsig_nr) {
739 737
740 } else { 738 } else {
741 739
742 /* 740 /*
743 * Linux has not KERN_RTSIGMAX since 2.6.6-mm2 741 * Linux has not KERN_RTSIGMAX since 2.6.6-mm2
744 * so drain rt signal queue unconditionally 742 * so drain the rt signal queue unconditionally
745 */ 743 */
746 744
747 while (ngx_rtsig_process_events(cycle) == NGX_OK) { /* void */ } 745 while (ngx_rtsig_process_events(cycle) == NGX_OK) { /* void */ }
748 } 746 }
749 747