1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-02 04:22:44 +00:00

use a straight lock, rather than a rwlock, for rate control

This commit is contained in:
Charles Kerr 2007-08-02 16:07:34 +00:00
parent f0b4524fbe
commit 65b81d09b6

View file

@ -44,7 +44,7 @@ tr_transfer_t;
struct tr_ratecontrol_s struct tr_ratecontrol_s
{ {
tr_rwlock_t * lock; tr_lock_t * lock;
int limit; int limit;
int newest; int newest;
tr_transfer_t transfers[HISTORY_SIZE]; tr_transfer_t transfers[HISTORY_SIZE];
@ -80,7 +80,7 @@ tr_rcInit( void )
{ {
tr_ratecontrol_t * r = tr_new0( tr_ratecontrol_t, 1 ); tr_ratecontrol_t * r = tr_new0( tr_ratecontrol_t, 1 );
r->limit = 0; r->limit = 0;
r->lock = tr_rwNew( ); r->lock = tr_lockNew( );
return r; return r;
} }
@ -88,7 +88,7 @@ void
tr_rcClose( tr_ratecontrol_t * r ) tr_rcClose( tr_ratecontrol_t * r )
{ {
tr_rcReset( r ); tr_rcReset( r );
tr_rwFree( r->lock ); tr_lockFree( r->lock );
tr_free( r ); tr_free( r );
} }
@ -100,11 +100,11 @@ int
tr_rcCanTransfer( const tr_ratecontrol_t * r ) tr_rcCanTransfer( const tr_ratecontrol_t * r )
{ {
int ret; int ret;
tr_rwReaderLock( (tr_rwlock_t*)r->lock ); tr_lockLock( (tr_lock_t*)r->lock );
ret = rateForInterval( r, SHORT_INTERVAL_MSEC ) < r->limit; ret = rateForInterval( r, SHORT_INTERVAL_MSEC ) < r->limit;
tr_rwReaderUnlock( (tr_rwlock_t*)r->lock ); tr_lockUnlock( (tr_lock_t*)r->lock );
return ret; return ret;
} }
@ -112,11 +112,11 @@ float
tr_rcRate( const tr_ratecontrol_t * r ) tr_rcRate( const tr_ratecontrol_t * r )
{ {
float ret; float ret;
tr_rwReaderLock( (tr_rwlock_t*)r->lock ); tr_lockLock( (tr_lock_t*)r->lock );
ret = rateForInterval( r, LONG_INTERVAL_MSEC ); ret = rateForInterval( r, LONG_INTERVAL_MSEC );
tr_rwReaderUnlock( (tr_rwlock_t*)r->lock ); tr_lockUnlock( (tr_lock_t*)r->lock );
return ret; return ret;
} }
@ -132,7 +132,7 @@ tr_rcTransferred( tr_ratecontrol_t * r, int size )
if( size < 100 ) /* don't count small messages */ if( size < 100 ) /* don't count small messages */
return; return;
tr_rwWriterLock( r->lock ); tr_lockLock( (tr_lock_t*)r->lock );
now = tr_date (); now = tr_date ();
if( r->transfers[r->newest].date + GRANULARITY_MSEC >= now ) if( r->transfers[r->newest].date + GRANULARITY_MSEC >= now )
@ -143,24 +143,24 @@ tr_rcTransferred( tr_ratecontrol_t * r, int size )
r->transfers[r->newest].size = size; r->transfers[r->newest].size = size;
} }
tr_rwWriterUnlock( r->lock ); tr_lockUnlock( (tr_lock_t*)r->lock );
} }
void void
tr_rcReset( tr_ratecontrol_t * r ) tr_rcReset( tr_ratecontrol_t * r )
{ {
tr_rwWriterLock( r->lock ); tr_lockLock( (tr_lock_t*)r->lock );
r->newest = 0; r->newest = 0;
memset( r->transfers, 0, sizeof(tr_transfer_t) * HISTORY_SIZE ); memset( r->transfers, 0, sizeof(tr_transfer_t) * HISTORY_SIZE );
tr_rwWriterUnlock( r->lock ); tr_lockUnlock( (tr_lock_t*)r->lock );
} }
void void
tr_rcSetLimit( tr_ratecontrol_t * r, int limit ) tr_rcSetLimit( tr_ratecontrol_t * r, int limit )
{ {
tr_rwWriterLock( r->lock ); tr_lockLock( (tr_lock_t*)r->lock );
r->limit = limit; r->limit = limit;
tr_rwWriterUnlock( r->lock ); tr_lockUnlock( (tr_lock_t*)r->lock );
} }
int int