diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/http/ngx_http_spdy_filter_module.c | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/src/http/ngx_http_spdy_filter_module.c b/src/http/ngx_http_spdy_filter_module.c index 92c760243..559fb4aab 100644 --- a/src/http/ngx_http_spdy_filter_module.c +++ b/src/http/ngx_http_spdy_filter_module.c @@ -625,6 +625,20 @@ ngx_http_spdy_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit) r = fc->data; stream = r->spdy_stream; +#if (NGX_SUPPRESS_WARN) + size = 0; +#endif + + while (in) { + size = ngx_buf_size(in->buf); + + if (size || in->buf->last_buf) { + break; + } + + in = in->next; + } + if (in == NULL) { if (stream->queued) { @@ -638,8 +652,6 @@ ngx_http_spdy_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit) sc = stream->connection; - size = ngx_buf_size(in->buf); - if (size && ngx_http_spdy_flow_control(sc, stream) == NGX_DECLINED) { fc->write->delayed = 1; return in; @@ -850,48 +862,45 @@ ngx_http_spdy_filter_get_data_frame(ngx_http_spdy_stream_t *stream, "spdy:%ui create DATA frame %p: len:%uz flags:%ui", stream->id, frame, len, flags); - if (len || flags) { - - cl = ngx_chain_get_free_buf(stream->request->pool, - &stream->free_data_headers); - if (cl == NULL) { - return NULL; - } + cl = ngx_chain_get_free_buf(stream->request->pool, + &stream->free_data_headers); + if (cl == NULL) { + return NULL; + } - buf = cl->buf; + buf = cl->buf; - if (buf->start) { - p = buf->start; - buf->pos = p; + if (buf->start) { + p = buf->start; + buf->pos = p; - p += NGX_SPDY_SID_SIZE; + p += NGX_SPDY_SID_SIZE; - (void) ngx_spdy_frame_write_flags_and_len(p, flags, len); + (void) ngx_spdy_frame_write_flags_and_len(p, flags, len); - } else { - p = ngx_palloc(stream->request->pool, NGX_SPDY_FRAME_HEADER_SIZE); - if (p == NULL) { - return NULL; - } + } else { + p = ngx_palloc(stream->request->pool, NGX_SPDY_FRAME_HEADER_SIZE); + if (p == NULL) { + return NULL; + } - buf->pos = p; - buf->start = p; + buf->pos = p; + buf->start = p; - p = ngx_spdy_frame_write_sid(p, stream->id); - p = ngx_spdy_frame_write_flags_and_len(p, flags, len); + p = ngx_spdy_frame_write_sid(p, stream->id); + p = ngx_spdy_frame_write_flags_and_len(p, flags, len); - buf->last = p; - buf->end = p; + buf->last = p; + buf->end = p; - buf->tag = (ngx_buf_tag_t) &ngx_http_spdy_filter_get_data_frame; - buf->memory = 1; - } + buf->tag = (ngx_buf_tag_t) &ngx_http_spdy_filter_get_data_frame; + buf->memory = 1; + } - cl->next = first; - first = cl; + cl->next = first; + first = cl; - last->buf->flush = 1; - } + last->buf->flush = 1; frame->first = first; frame->last = last; |
