diff -aur nginx-0.4.7/src/http/modules/ngx_http_flv_module.c nginx-0.4.7.1/src/http/modules/ngx_http_flv_module.c --- nginx-0.4.7/src/http/modules/ngx_http_flv_module.c 2006-10-09 11:38:59.000000000 -0400 +++ nginx-0.4.7.1/src/http/modules/ngx_http_flv_module.c 2006-10-10 22:23:38.000000000 -0400 @@ -70,6 +70,7 @@ ngx_log_t *log; ngx_buf_t *b; ngx_chain_t out[2]; + ngx_chain_t *out_p; ngx_file_info_t fi; ngx_pool_cleanup_t *cln; ngx_pool_cleanup_file_t *clnf; @@ -190,25 +191,33 @@ clnf->log = r->pool->log; r->headers_out.status = NGX_HTTP_OK; - r->headers_out.content_length_n = sizeof(ngx_flv_header) - 1 + len; + r->headers_out.content_length_n = len; + if (start) { + r->headers_out.content_length_n += sizeof(ngx_flv_header) - 1; + } r->headers_out.last_modified_time = ngx_file_mtime(&fi); if (ngx_http_set_content_type(r) != NGX_OK) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } - b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); - if (b == NULL) { - return NGX_HTTP_INTERNAL_SERVER_ERROR; - } - - b->pos = ngx_flv_header; - b->last = ngx_flv_header + sizeof(ngx_flv_header) - 1; - b->memory = 1; + out_p = out; - out[0].buf = b; - out[0].next = &out[1]; + if (start) { + b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); + if (b == NULL) { + return NGX_HTTP_INTERNAL_SERVER_ERROR; + } + b->pos = ngx_flv_header; + b->last = ngx_flv_header + sizeof(ngx_flv_header) - 1; + b->memory = 1; + + out_p->buf = b; + out_p->next = out_p + 1; + out_p++; + } + b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if (b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; @@ -236,8 +245,8 @@ b->file->name = path; b->file->log = log; - out[1].buf = b; - out[1].next = NULL; + out_p->buf = b; + out_p->next = NULL; return ngx_http_output_filter(r, out); }