comparison src/http/ngx_http_upstream.c @ 2807:6ad4bba6313e

delete level event of appropriate type, this should fix select()'s EBADF, WSAENOTSOCK, and "select ready != events" alerts
author Igor Sysoev <igor@sysoev.ru>
date Wed, 06 May 2009 08:40:44 +0000
parents 60551422e150
children d106509491b5
comparison
equal deleted inserted replaced
2806:a445bd4eb571 2807:6ad4bba6313e
766 ngx_event_t *ev) 766 ngx_event_t *ev)
767 { 767 {
768 int n; 768 int n;
769 char buf[1]; 769 char buf[1];
770 ngx_err_t err; 770 ngx_err_t err;
771 ngx_int_t event;
771 ngx_connection_t *c; 772 ngx_connection_t *c;
772 ngx_http_upstream_t *u; 773 ngx_http_upstream_t *u;
773 774
774 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ev->log, 0, 775 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, ev->log, 0,
775 "http upstream check client, write event:%d, \"%V\"", 776 "http upstream check client, write event:%d, \"%V\"",
777 778
778 c = r->connection; 779 c = r->connection;
779 u = r->upstream; 780 u = r->upstream;
780 781
781 if (c->error) { 782 if (c->error) {
783 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) {
784
785 event = ev->write ? NGX_WRITE_EVENT : NGX_READ_EVENT;
786
787 if (ngx_del_event(ev, event, 0) != NGX_OK) {
788 ngx_http_upstream_finalize_request(r, u,
789 NGX_HTTP_INTERNAL_SERVER_ERROR);
790 return;
791 }
792 }
793
782 if (!u->cacheable) { 794 if (!u->cacheable) {
783 ngx_http_upstream_finalize_request(r, u, 795 ngx_http_upstream_finalize_request(r, u,
784 NGX_HTTP_CLIENT_CLOSED_REQUEST); 796 NGX_HTTP_CLIENT_CLOSED_REQUEST);
785 } 797 }
798
786 return; 799 return;
787 } 800 }
788 801
789 if (u->peer.connection == NULL) { 802 if (u->peer.connection == NULL) {
790 return; 803 return;
834 err = ngx_socket_errno; 847 err = ngx_socket_errno;
835 848
836 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, err, 849 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, ev->log, err,
837 "http upstream recv(): %d", n); 850 "http upstream recv(): %d", n);
838 851
839 /*
840 * we do not need to disable the write event because
841 * that event has NGX_USE_CLEAR_EVENT type
842 */
843
844 if (ev->write && (n >= 0 || err == NGX_EAGAIN)) { 852 if (ev->write && (n >= 0 || err == NGX_EAGAIN)) {
845 return; 853 return;
846 } 854 }
847 855
848 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) { 856 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && ev->active) {
849 if (ngx_del_event(ev, NGX_READ_EVENT, 0) == NGX_ERROR) { 857
858 event = ev->write ? NGX_WRITE_EVENT : NGX_READ_EVENT;
859
860 if (ngx_del_event(ev, event, 0) != NGX_OK) {
850 ngx_http_upstream_finalize_request(r, u, 861 ngx_http_upstream_finalize_request(r, u,
851 NGX_HTTP_INTERNAL_SERVER_ERROR); 862 NGX_HTTP_INTERNAL_SERVER_ERROR);
852 return; 863 return;
853 } 864 }
854 } 865 }