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