Mercurial > hg > nginx
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 } |