diff --git a/libtransmission/peer-io.c b/libtransmission/peer-io.c index 986a8d004..8ccbf953c 100644 --- a/libtransmission/peer-io.c +++ b/libtransmission/peer-io.c @@ -267,6 +267,14 @@ tr_evbuffer_write( tr_peerIo * io, int fd, size_t howmuch ) if( n > 0 ) evbuffer_drain( buffer, n ); + /* keep the iobuf's excess capacity from growing too large */ + if( buffer->totallen > ( EVBUFFER_LENGTH( buffer ) + 1024 ) ) { + struct evbuffer * swap = evbuffer_new( ); + evbuffer_add( swap, EVBUFFER_DATA( buffer ), EVBUFFER_LENGTH( buffer ) ); + evbuffer_free( buffer ); + io->outbuf = swap; + } + return n; }