diff options
Diffstat (limited to 'src/event/ngx_event_pipe.c')
-rw-r--r-- | src/event/ngx_event_pipe.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index 9970ed328..779ec1867 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -122,6 +122,8 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) } else { +#if (NGX_HAVE_KQUEUE) + /* * kqueue notifies about the end of file or a pending error. * This test allows not to allocate a buf on these conditions @@ -129,14 +131,15 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) */ if (p->upstream->read->available == 0 - && p->upstream->read->pending_eof) + && p->upstream->read->pending_eof + /* FreeBSD 5.x-6.x may erroneously report ETIMEDOUT */ + && p->upstream->read->kq_errno != NGX_ETIMEDOUT) { p->upstream->read->ready = 0; p->upstream->read->eof = 0; p->upstream_eof = 1; p->read = 1; -#if (NGX_HAVE_KQUEUE) if (p->upstream->read->kq_errno) { p->upstream->read->error = 1; p->upstream_error = 1; @@ -144,12 +147,13 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) ngx_log_error(NGX_LOG_ERR, p->log, p->upstream->read->kq_errno, - "readv() failed"); + "kevent() reported that upstream " + "closed connection"); } -#endif break; } +#endif if (p->free_raw_bufs) { |