summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2013-01-28 15:37:11 +0000
committerValentin Bartenev <vbart@nginx.com>2013-01-28 15:37:11 +0000
commit0f62e193dc98435f9e186da016681ba2aa5a2064 (patch)
treeb04363f1ed7e374875b48f1587c5236a6feac281 /src
parentc857dade60bf7298226e0ba3d817ac56fb4abf49 (diff)
downloadnginx-0f62e193dc98435f9e186da016681ba2aa5a2064.tar.gz
nginx-0f62e193dc98435f9e186da016681ba2aa5a2064.tar.bz2
SSL: preservation of flush flag for buffered data.
Previously, if SSL buffer was not sent we lost information that the data must be flushed.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_openssl.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 60d4f6193..362b0f73a 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -1169,7 +1169,7 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
}
send = 0;
- flush = (in == NULL) ? 1 : 0;
+ flush = (in == NULL) ? 1 : buf->flush;
for ( ;; ) {
@@ -1191,7 +1191,6 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
if (send + size > limit) {
size = (ssize_t) (limit - send);
- flush = 1;
}
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
@@ -1210,7 +1209,7 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
size = buf->last - buf->pos;
- if (!flush && buf->last < buf->end) {
+ if (!flush && send < limit && buf->last < buf->end) {
break;
}
@@ -1221,8 +1220,7 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
}
if (n == NGX_AGAIN) {
- c->buffered |= NGX_SSL_BUFFERED;
- return in;
+ break;
}
buf->pos += n;
@@ -1242,6 +1240,8 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
}
}
+ buf->flush = flush;
+
if (buf->pos < buf->last) {
c->buffered |= NGX_SSL_BUFFERED;