View | Details | Raw Unified | Return to bug 39380
Collapse All | Expand All

(-)httpd-2.2.6-patched/modules/cache/mod_disk_cache.c (-6 / +17 lines)
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,
(-)httpd-2.2.6-patched/modules/cache/mod_disk_cache.h (+2 lines)
Lines 124-129 Link Here
124
    apr_interval_time_t updtimeout; /* Cache update timeout */
124
    apr_interval_time_t updtimeout; /* Cache update timeout */
125
125
126
    disk_cache_info_t disk_info; /* Disk header information. */
126
    disk_cache_info_t disk_info; /* Disk header information. */
127
128
    apr_off_t bytes_sent; /* Copy of r->bytes_sent before calling recall_body */
127
} disk_cache_object_t;
129
} disk_cache_object_t;
128
130
129
131

Return to bug 39380