Lines 593-598
Link Here
|
593 |
dobj->updtimeout = conf->updtimeout; |
593 |
dobj->updtimeout = conf->updtimeout; |
594 |
dobj->removedirs = conf->removedirs; |
594 |
dobj->removedirs = conf->removedirs; |
595 |
dobj->header_only = r->header_only; |
595 |
dobj->header_only = r->header_only; |
|
|
596 |
dobj->bytes_sent = 0; |
596 |
|
597 |
|
597 |
if(r->filename != NULL && strlen(r->filename) > 0) { |
598 |
if(r->filename != NULL && strlen(r->filename) > 0) { |
598 |
char buf[34]; |
599 |
char buf[34]; |
Lines 1506-1511
Link Here
|
1506 |
{ |
1507 |
{ |
1507 |
apr_bucket *e; |
1508 |
apr_bucket *e; |
1508 |
disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj; |
1509 |
disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj; |
|
|
1510 |
apr_off_t bytes_already_done; |
1509 |
|
1511 |
|
1510 |
if(dobj->hfd != NULL) { |
1512 |
if(dobj->hfd != NULL) { |
1511 |
/* Close header cache file, it won't be needed anymore */ |
1513 |
/* Close header cache file, it won't be needed anymore */ |
Lines 1529-1546
Link Here
|
1529 |
} |
1531 |
} |
1530 |
|
1532 |
|
1531 |
/* Insert as much as possible as regular file (ie. sendfile():able) */ |
1533 |
/* Insert as much as possible as regular file (ie. sendfile():able) */ |
1532 |
if(dobj->file_size > 0) { |
1534 |
/* We need to make sure to skip the beginning of the file if we've |
1533 |
if(apr_brigade_insert_file(bb, dobj->bfd, 0, |
1535 |
already sent some bytes, e.g., due to mod_proxy */ |
1534 |
dobj->file_size, p) == NULL) |
1536 |
if(dobj->file_size > dobj->bytes_sent) { |
|
|
1537 |
if(apr_brigade_insert_file(bb, dobj->bfd, dobj->bytes_sent, |
1538 |
dobj->file_size - dobj->bytes_sent, p) == NULL) |
1535 |
{ |
1539 |
{ |
1536 |
return APR_ENOMEM; |
1540 |
return APR_ENOMEM; |
1537 |
} |
1541 |
} |
|
|
1542 |
bytes_already_done = dobj->file_size; |
1543 |
} else { |
1544 |
bytes_already_done = dobj->bytes_sent; |
1538 |
} |
1545 |
} |
1539 |
|
1546 |
|
1540 |
/* Insert any remainder as read-while-caching bucket */ |
1547 |
/* Insert any remainder as read-while-caching bucket */ |
1541 |
if(dobj->file_size < dobj->initial_size) { |
1548 |
if(bytes_already_done < dobj->initial_size) { |
1542 |
if(diskcache_brigade_insert(bb, dobj->bfd, dobj->file_size, |
1549 |
if(diskcache_brigade_insert(bb, dobj->bfd, bytes_already_done, |
1543 |
dobj->initial_size - dobj->file_size, |
1550 |
dobj->initial_size - bytes_already_done, |
1544 |
dobj->updtimeout, p |
1551 |
dobj->updtimeout, p |
1545 |
) == NULL) |
1552 |
) == NULL) |
1546 |
{ |
1553 |
{ |
Lines 2455-2460
Link Here
|
2455 |
} |
2462 |
} |
2456 |
|
2463 |
|
2457 |
/* Then, populate it with our cached instance */ |
2464 |
/* Then, populate it with our cached instance */ |
|
|
2465 |
|
2466 |
/* in case we've already sent part, e.g. via mod_proxy */ |
2467 |
dobj->bytes_sent = r->bytes_sent; |
2468 |
|
2458 |
rv = recall_body(h, r->pool, bb); |
2469 |
rv = recall_body(h, r->pool, bb); |
2459 |
if (rv != APR_SUCCESS) { |
2470 |
if (rv != APR_SUCCESS) { |
2460 |
ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, |
2471 |
ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, |