aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-07-25 18:34:14 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-07-25 18:34:14 +0000
commit0599b11937990b169c05f95eeaed7cf22d823740 (patch)
tree3e52ebeadd8d0442e33ae96ec0ae9a755aa54696 /src
parenta2b360d0b9196a130f9e39184edde69076d906ed (diff)
downloadnginx-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.h1
-rw-r--r--src/core/ngx_connection.h1
-rw-r--r--src/event/ngx_event_openssl.c16
-rw-r--r--src/http/ngx_http_write_filter.c17
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;
}