]> git.kaiwu.me - nginx.git/commitdiff
Upstream: better detection of connect() failures with kqueue.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 16 Nov 2012 18:29:19 +0000 (18:29 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Fri, 16 Nov 2012 18:29:19 +0000 (18:29 +0000)
Pending EOF might be reported on both read and write events, whichever
comes first, so check both of them.

Patch by Yichun Zhang (agentzh), slightly modified.

src/http/ngx_http_upstream.c

index 75ef64e5560007192bb3edf925a7744cda718af8..9a9bfc0008a735927f3a3d0030c7014a36f64c78 100644 (file)
@@ -1809,9 +1809,16 @@ ngx_http_upstream_test_connect(ngx_connection_t *c)
 #if (NGX_HAVE_KQUEUE)
 
     if (ngx_event_flags & NGX_USE_KQUEUE_EVENT)  {
-        if (c->write->pending_eof) {
+        if (c->write->pending_eof || c->read->pending_eof) {
+            if (c->write->pending_eof) {
+                err = c->write->kq_errno;
+
+            } else {
+                err = c->read->kq_errno;
+            }
+
             c->log->action = "connecting to upstream";
-            (void) ngx_connection_error(c, c->write->kq_errno,
+            (void) ngx_connection_error(c, err, 
                                     "kevent() reported that connect() failed");
             return NGX_ERROR;
         }