diff ngx_http_upstream_keepalive_module.c @ 33:52ca695446d3

Keepalive: more connection validity checks. Make sure to not cache connections with errors detected, as well as EOF already read or pending data present. Call ngx_handle_read_event() for event methods which need it.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 31 Aug 2011 21:21:14 +0400
parents 9aa0d263f2a7
children 4574b97220fb
line wrap: on
line diff
--- a/ngx_http_upstream_keepalive_module.c
+++ b/ngx_http_upstream_keepalive_module.c
@@ -337,7 +337,11 @@ ngx_http_upstream_free_keepalive_peer(ng
 
     if (kp->failed
         || c == NULL
+        || c->read->eof
+        || c->read->ready
+        || c->read->error
         || c->read->timedout
+        || c->write->error
         || c->write->timedout)
     {
         goto invalid;
@@ -370,6 +374,10 @@ ngx_http_upstream_free_keepalive_peer(ng
 
 #endif
 
+    if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
+        goto invalid;
+    }
+
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
                    "free keepalive peer: saving connection %p", c);