diff options
| author | Valentin Bartenev <vbart@nginx.com> | 2013-01-28 15:37:11 +0000 |
|---|---|---|
| committer | Valentin Bartenev <vbart@nginx.com> | 2013-01-28 15:37:11 +0000 |
| commit | 0f62e193dc98435f9e186da016681ba2aa5a2064 (patch) | |
| tree | b04363f1ed7e374875b48f1587c5236a6feac281 /src | |
| parent | c857dade60bf7298226e0ba3d817ac56fb4abf49 (diff) | |
| download | nginx-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.c | 10 |
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; |
