diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-07-25 18:34:14 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-07-25 18:34:14 +0000 |
commit | 0599b11937990b169c05f95eeaed7cf22d823740 (patch) | |
tree | 3e52ebeadd8d0442e33ae96ec0ae9a755aa54696 /src | |
parent | a2b360d0b9196a130f9e39184edde69076d906ed (diff) | |
download | nginx-0599b11937990b169c05f95eeaed7cf22d823740.tar.gz nginx-0599b11937990b169c05f95eeaed7cf22d823740.zip |
nginx-0.0.7-2004-07-25-22:34:14 import
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ngx_buf.h | 1 | ||||
-rw-r--r-- | src/core/ngx_connection.h | 1 | ||||
-rw-r--r-- | src/event/ngx_event_openssl.c | 16 | ||||
-rw-r--r-- | src/http/ngx_http_write_filter.c | 17 |
4 files changed, 9 insertions, 26 deletions
diff --git a/src/core/ngx_buf.h b/src/core/ngx_buf.h index feaad4c96..1927ed415 100644 --- a/src/core/ngx_buf.h +++ b/src/core/ngx_buf.h @@ -132,7 +132,6 @@ typedef struct { #define NGX_CHAIN_ERROR (ngx_chain_t *) NGX_ERROR -#define NGX_CHAIN_AGAIN (ngx_chain_t *) NGX_AGAIN #define ngx_buf_in_memory(b) (b->temporary || b->memory || b->mmap) diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h index bc30b13ea..c2bdcea4b 100644 --- a/src/core/ngx_connection.h +++ b/src/core/ngx_connection.h @@ -108,6 +108,7 @@ struct ngx_connection_s { unsigned log_error:2; /* ngx_connection_log_error_e */ + unsigned buffered:1; unsigned single_connection:1; unsigned pipeline:1; unsigned unexpected_eof:1; diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 9e8dd0b1f..0116787a2 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -118,13 +118,13 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit) { int n; - ngx_uint_t flush, last; + ngx_uint_t flush; ssize_t send, size; ngx_buf_t *buf; buf = c->ssl->buf; - if (in && in->next == NULL && buf->pos == buf->last && !c->ssl->buffer) { + if (in && in->next == NULL && !c->buffered && !c->ssl->buffer) { /* * we avoid a buffer copy if the incoming buf is a single, @@ -148,14 +148,12 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, send = 0; flush = (in == NULL) ? 1 : 0; - last = (in == NULL) ? 1 : 0; for ( ;; ) { while (in && buf->last < buf->end) { if (in->buf->last_buf) { flush = 1; - last = 1; } if (ngx_buf_special(in->buf)) { @@ -226,15 +224,9 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, } } - if (in) { - return in; - } - - if (buf->pos == buf->last || !last) { - return NULL; - } + c->buffered = (buf->pos < buf->last) ? 1 : 0; - return NGX_CHAIN_AGAIN; + return in; } diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c index 412d4f9bc..2c0989d0a 100644 --- a/src/http/ngx_http_write_filter.c +++ b/src/http/ngx_http_write_filter.c @@ -7,9 +7,6 @@ typedef struct { ngx_chain_t *out; - - /* unsigned flush:1; */ - ngx_uint_t flush; } ngx_http_write_filter_ctx_t; @@ -119,7 +116,7 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in) return NGX_AGAIN; } - if (size == 0 && !ctx->flush) { + if (size == 0 && !c->buffered) { if (!last) { ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "the http output chain is empty"); @@ -146,19 +143,13 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in) return NGX_ERROR; } - if (chain == NGX_CHAIN_AGAIN) { - ctx->out = NULL; - ctx->flush = 1; - return NGX_AGAIN; - } - ctx->out = chain; - if (chain == NULL) { - return NGX_OK; + if (chain || c->buffered) { + return NGX_AGAIN; } - return NGX_AGAIN; + return NGX_OK; } |