Changeset 11782


Ignore:
Timestamp:
Jan 29, 2011, 6:56:53 PM (11 years ago)
Author:
jordan
Message:

(trunk libT) memory cache should use evbuffers to avoid unnecessary calls to memcpy -- done.

Location:
trunk/libtransmission
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/cache.c

    r11709 r11782  
    1111 */
    1212
     13#include <event2/buffer.h>
     14
    1315#include "transmission.h"
    1416#include "cache.h"
     
    4345    tr_block_index_t block;
    4446
    45     uint8_t * buf;
     47    struct evbuffer * evbuf;
    4648};
    4749
     
    171173    for( i=pos; i<pos+n; ++i ) {
    172174        b = blocks[i];
    173         memcpy( walk, b->buf, b->length );
     175        evbuffer_copyout( b->evbuf, walk, b->length );
    174176        walk += b->length;
    175         tr_free( b->buf );
     177        evbuffer_free( b->evbuf );
    176178        tr_free( b );
    177179    }
     
    320322                    uint32_t           offset,
    321323                    uint32_t           length,
    322                     const uint8_t    * writeme )
     324                    struct evbuffer  * writeme )
    323325{
    324326    struct cache_block * cb = findBlock( cache, torrent, piece, offset );
     
    332334        cb->length = length;
    333335        cb->block = _tr_block( torrent, piece, offset );
    334         cb->buf = NULL;
     336        cb->evbuf = evbuffer_new( );
    335337        tr_ptrArrayInsertSorted( &cache->blocks, cb, cache_block_compare );
    336338    }
     
    338340    cb->time = tr_time();
    339341
    340     tr_free( cb->buf );
    341     cb->buf = tr_memdup( writeme, cb->length );
     342    assert( cb->length == length );
     343    evbuffer_drain( cb->evbuf, evbuffer_get_length( cb->evbuf ) );
     344    evbuffer_remove_buffer( writeme, cb->evbuf, cb->length );
    342345
    343346    ++cache->cache_writes;
     
    359362
    360363    if( cb )
    361         memcpy( setme, cb->buf, len );
     364        evbuffer_copyout( cb->evbuf, setme, len );
    362365    else
    363366        err = tr_ioRead( torrent, piece, offset, len, setme );
  • trunk/libtransmission/cache.h

    r11709 r11782  
    1717#ifndef TR_CACHE_H
    1818#define TR_CACHE_H
     19
     20struct evbuffer;
    1921
    2022typedef struct tr_cache tr_cache;
     
    4143                        uint32_t           offset,
    4244                        uint32_t           len,
    43                         const uint8_t    * writeme );
     45                        struct evbuffer  * writeme );
    4446
    4547int tr_cacheReadBlock( tr_cache         * cache,
  • trunk/libtransmission/peer-msgs.c

    r11748 r11782  
    12801280
    12811281static int clientGotBlock( tr_peermsgs *               msgs,
    1282                            const uint8_t *             block,
     1282                           struct evbuffer *           block,
    12831283                           const struct peer_request * req );
    12841284
     
    13361336
    13371337        /* we've got the whole block ... process it */
    1338         err = clientGotBlock( msgs, evbuffer_pullup( msgs->incoming.block, -1 ), req );
     1338        err = clientGotBlock( msgs, msgs->incoming.block, req );
    13391339
    13401340        /* cleanup */
     
    15631563static int
    15641564clientGotBlock( tr_peermsgs *               msgs,
    1565                 const uint8_t *             data,
     1565                struct evbuffer *           data,
    15661566                const struct peer_request * req )
    15671567{
  • trunk/libtransmission/webseed.c

    r11754 r11782  
    201201            tr_cacheWriteBlock( session->cache, tor,
    202202                                t->piece_index, t->piece_offset, t->length,
    203                                 evbuffer_pullup( t->content, -1 ) );
     203                                t->content );
    204204            fire_client_got_block( tor, w, t->block );
    205205
Note: See TracChangeset for help on using the changeset viewer.