Mercurial > hg > ngx_http_bytes_filter_module
comparison ngx_http_bytes_filter_module.c @ 8:60d65f2acaed
Optimized version for last range and last buffer.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 15 Jul 2008 06:20:32 +0400 |
parents | 2e1eaf93e67e |
children | 4206defe5590 |
comparison
equal
deleted
inserted
replaced
7:2e1eaf93e67e | 8:60d65f2acaed |
---|---|
323 } | 323 } |
324 | 324 |
325 last = ctx->ranges.elts; | 325 last = ctx->ranges.elts; |
326 last += ctx->ranges.nelts; | 326 last += ctx->ranges.nelts; |
327 | 327 |
328 #if 0 | 328 /* optimized version for last range and last buffer */ |
329 /* ... temp, rewrite */ | 329 |
330 | 330 if (range == last - 1 && buf->last_buf) { |
331 if (ctx->ranges.nelts == 1) { | 331 |
332 size = ngx_buf_size(buf); | |
332 | 333 |
333 if (buf->in_file) { | 334 if (buf->in_file) { |
334 buf->file_pos = range->start; | 335 if (range->start > ctx->offset) { |
335 buf->file_last = range->end; | 336 buf->file_pos += range->start - ctx->offset; |
337 } | |
338 if (range->end < ctx->offset + size) { | |
339 buf->file_last -= ctx->offset + size - range->end; | |
340 } | |
336 } | 341 } |
337 | 342 |
338 if (ngx_buf_in_memory(buf)) { | 343 if (ngx_buf_in_memory(buf)) { |
339 buf->pos = buf->start + (size_t) range->start; | 344 if (range->start > ctx->offset) { |
340 buf->last = buf->start + (size_t) range->end; | 345 buf->pos += (size_t) (range->start - ctx->offset); |
346 } | |
347 if (range->end < ctx->offset + size) { | |
348 buf->last -= (size_t) (ctx->offset + size - range->end); | |
349 } | |
341 } | 350 } |
342 | 351 |
343 return ngx_http_next_body_filter(r, in); | 352 return ngx_http_next_body_filter(r, in); |
344 } | 353 } |
345 #endif | |
346 | |
347 /* ... */ | |
348 | 354 |
349 for (ll = &in, cl = in; cl; ll = &cl->next, cl = cl->next, | 355 for (ll = &in, cl = in; cl; ll = &cl->next, cl = cl->next, |
350 ctx->offset += size) | 356 ctx->offset += size) |
351 { | 357 { |
352 | 358 |