Changeset 1869
- Timestamp:
- May 16, 2007, 2:03:18 AM (15 years ago)
- Location:
- trunk/libtransmission
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/internal.h
r1750 r1869 220 220 struct tr_handle_s 221 221 { 222 int torrentCount; 223 tr_torrent_t * torrentList; 224 225 char * tag; 226 int isPortSet; 227 int uploadLimit; 228 int downloadLimit; 229 tr_shared_t * shared; 222 int torrentCount; 223 tr_torrent_t * torrentList; 224 225 char * tag; 226 int isPortSet; 227 228 tr_ratecontrol_t * upload; 229 tr_ratecontrol_t * download; 230 231 tr_shared_t * shared; 230 232 231 233 #define TR_ID_LEN 20 -
trunk/libtransmission/peer.c
r1653 r1869 281 281 if( tor ) 282 282 { 283 if( tor->customDownloadLimit ) 283 if( tor->customDownloadLimit 284 ? !tr_rcCanTransfer( tor->download ) 285 : !tr_rcCanTransfer( tor->handle->download ) ) 284 286 { 285 if( !tr_rcCanTransfer( tor->download ) ) 286 { 287 break; 288 } 289 } 290 else 291 { 292 tr_lockUnlock( &tor->lock ); 293 if( !tr_rcCanGlobalTransfer( tor->handle, 0 ) ) 294 { 295 tr_lockLock( &tor->lock ); 296 break; 297 } 298 tr_lockLock( &tor->lock ); 287 break; 299 288 } 300 289 } … … 329 318 tr_rcTransferred( peer->download, ret ); 330 319 tr_rcTransferred( tor->download, ret ); 320 if ( !tor->customDownloadLimit ) 321 { 322 tr_rcTransferred( tor->handle->download, ret ); 323 } 324 331 325 if( ( ret = parseBuf( tor, peer ) ) ) 332 326 { … … 490 484 while( ( p = blockPending( tor, peer, &size ) ) ) 491 485 { 492 if( tor->customUploadLimit ) 493 { 494 if( !tr_rcCanTransfer( tor->upload ) ) 495 { 496 break; 497 } 498 } 499 else 500 { 501 tr_lockUnlock( &tor->lock ); 502 if( !tr_rcCanGlobalTransfer( tor->handle, 1 ) ) 503 { 504 tr_lockLock( &tor->lock ); 505 break; 506 } 507 tr_lockLock( &tor->lock ); 486 if( tor->customUploadLimit 487 ? !tr_rcCanTransfer( tor->upload ) 488 : !tr_rcCanTransfer( tor->handle->upload ) ) 489 { 490 break; 508 491 } 509 492 … … 521 504 tr_rcTransferred( peer->upload, ret ); 522 505 tr_rcTransferred( tor->upload, ret ); 506 if ( !tor->customUploadLimit ) 507 { 508 tr_rcTransferred( tor->handle->upload, ret ); 509 } 523 510 524 511 tor->uploadedCur += ret; -
trunk/libtransmission/ratecontrol.c
r1452 r1869 81 81 82 82 return r; 83 }84 85 int tr_rcCanGlobalTransfer( tr_handle_t * h, int isUpload )86 {87 tr_torrent_t * tor;88 tr_ratecontrol_t * r;89 float rate = 0;90 int limit = isUpload ? h->uploadLimit : h->downloadLimit;91 92 if( limit <= 0 )93 {94 return limit < 0;95 }96 97 tr_sharedLock( h->shared );98 for( tor = h->torrentList; tor; tor = tor->next )99 {100 if( isUpload ? tor->customUploadLimit : tor->customDownloadLimit )101 {102 continue;103 }104 105 r = isUpload ? tor->upload : tor->download;106 tr_lockLock( &r->lock );107 rate += rateForInterval( r, SHORT_INTERVAL );108 tr_lockUnlock( &r->lock );109 110 if( rate >= (float)limit )111 {112 tr_sharedUnlock( h->shared );113 return 0;114 }115 }116 tr_sharedUnlock( h->shared );117 118 return 1;119 83 } 120 84 -
trunk/libtransmission/ratecontrol.h
r1320 r1869 26 26 27 27 tr_ratecontrol_t * tr_rcInit(); 28 int tr_rcCanGlobalTransfer( tr_handle_t * h, int isUpload );29 28 void tr_rcSetLimit( tr_ratecontrol_t *, int ); 30 29 int tr_rcCanTransfer( tr_ratecontrol_t * ); -
trunk/libtransmission/torrent.c
r1868 r1869 241 241 int tr_torrentDuplicateDownload( tr_torrent_t * tor ) 242 242 { 243 tr_torrent_t * current , * next;243 tr_torrent_t * current; 244 244 245 245 /* Check if a torrent with the same name and destination is already active */ -
trunk/libtransmission/transmission.c
r1704 r1869 80 80 81 81 /* Initialize rate and file descripts controls */ 82 h->upload Limit = -1;83 h->download Limit = -1;84 82 h->upload = tr_rcInit(); 83 h->download = tr_rcInit(); 84 85 85 tr_fdInit(); 86 86 h->shared = tr_sharedInit( h ); … … 126 126 void tr_setGlobalUploadLimit( tr_handle_t * h, int limit ) 127 127 { 128 h->uploadLimit = limit;128 tr_rcSetLimit( h->upload, limit ); 129 129 tr_sharedSetLimit( h->shared, limit ); 130 130 } … … 132 132 void tr_setGlobalDownloadLimit( tr_handle_t * h, int limit ) 133 133 { 134 h->downloadLimit = limit;134 tr_rcSetLimit( h->download, limit ); 135 135 } 136 136 … … 171 171 void tr_close( tr_handle_t * h ) 172 172 { 173 tr_rcClose( h->upload ); 174 tr_rcClose( h->download ); 175 173 176 tr_sharedClose( h->shared ); 174 177 tr_fdClose();
Note: See TracChangeset
for help on using the changeset viewer.