summaryrefslogtreecommitdiff
path: root/trackerlogic.c
diff options
context:
space:
mode:
authorerdgeist <>2007-10-16 00:33:31 +0000
committererdgeist <>2007-10-16 00:33:31 +0000
commitc730a24d0a0c12173ddcd105d6e5344205eb7503 (patch)
treefa963f160de27648fbc3e79217cd8553585f27b8 /trackerlogic.c
parent28d88e338032975b4b6fc3e0d6fd413b90c39596 (diff)
Fixed 24h clean bug. Allocate less memory for full scrape. Free torrents without any downloaders immediately.
Diffstat (limited to 'trackerlogic.c')
-rw-r--r--trackerlogic.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/trackerlogic.c b/trackerlogic.c
index 37b3c4d..ee7b7fc 100644
--- a/trackerlogic.c
+++ b/trackerlogic.c
@@ -312,7 +312,7 @@ size_t return_fullscrape_for_tracker( char **reply ) {
312 torrent_count += all_torrents[i].size; 312 torrent_count += all_torrents[i].size;
313 313
314 // one extra for pro- and epilogue 314 // one extra for pro- and epilogue
315 if( !( r = *reply = malloc( 128*(1+torrent_count) ) ) ) return 0; 315 if( !( r = *reply = malloc( 100*(1+torrent_count) ) ) ) return 0;
316 316
317 memmove( r, "d5:filesd", 9 ); r += 9; 317 memmove( r, "d5:filesd", 9 ); r += 9;
318 for( i=0; i<256; ++i ) { 318 for( i=0; i<256; ++i ) {
@@ -325,7 +325,7 @@ size_t return_fullscrape_for_tracker( char **reply ) {
325 peers += peer_list->peers[k].size; 325 peers += peer_list->peers[k].size;
326 seeds += peer_list->seed_count[k]; 326 seeds += peer_list->seed_count[k];
327 } 327 }
328 if( peers ) { 328 if( peers || peer_list->downloaded ) {
329 *r++='2'; *r++='0'; *r++=':'; 329 *r++='2'; *r++='0'; *r++=':';
330 memmove( r, hash, 20 ); r+=20; 330 memmove( r, hash, 20 ); r+=20;
331 r += sprintf( r, "d8:completei%zde10:downloadedi%zde10:incompletei%zdee", seeds, peer_list->downloaded, peers-seeds ); 331 r += sprintf( r, "d8:completei%zde10:downloadedi%zde10:incompletei%zdee", seeds, peer_list->downloaded, peers-seeds );
@@ -548,7 +548,7 @@ void clean_all_torrents( void ) {
548 /* Torrent has idled out */ 548 /* Torrent has idled out */
549 if( timedout > OT_TORRENT_TIMEOUT ) { 549 if( timedout > OT_TORRENT_TIMEOUT ) {
550 vector_remove_torrent( torrents_list, hash ); 550 vector_remove_torrent( torrents_list, hash );
551 --j; 551 --j; continue;
552 } 552 }
553 553
554 /* If nothing to be cleaned here, handle next torrent */ 554 /* If nothing to be cleaned here, handle next torrent */
@@ -558,8 +558,13 @@ void clean_all_torrents( void ) {
558 for( k = 0; k < OT_POOLS_COUNT; ++k ) 558 for( k = 0; k < OT_POOLS_COUNT; ++k )
559 peers_count += peer_list->peers[k].size; 559 peers_count += peer_list->peers[k].size;
560 560
561 if( !peers_count ) 561 if( !peers_count ) {
562 if( !peer_list->downloaded ) {
563 vector_remove_torrent( torrents_list, hash );
564 --j;
565 }
562 continue; 566 continue;
567 }
563 568
564 timedout = OT_POOLS_COUNT; 569 timedout = OT_POOLS_COUNT;
565 } 570 }