summaryrefslogtreecommitdiff
path: root/ot_clean.c
diff options
context:
space:
mode:
authorerdgeist <>2009-01-02 08:57:53 +0000
committererdgeist <>2009-01-02 08:57:53 +0000
commit2df09905f5540fee096d48a92cb0c42558498a12 (patch)
tree68eab61d29719400972485de395dd0465467aea6 /ot_clean.c
parent548e2b8338b5ee8d24fa928e833f345bb5cb6f0e (diff)
* opentracker now drops permissions in correct order and really chroots() if ran as root
* lock passing between add_peer_to_torrent and return_peers_for_torrent is now avoided by providing a more general add_peer_to_torrent_and_return_peers function that can be used with NULL parameters to not return any peers (in sync case) * in order to keep a fast overview how many torrents opentracker maintains, every mutex_bucket_unlock operation expects an additional integer parameter that tells ot_mutex.c how many torrents have been added or removed. A function mutex_get_torrent_count has been introduced.
Diffstat (limited to 'ot_clean.c')
-rw-r--r--ot_clean.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/ot_clean.c b/ot_clean.c
index 4adeee6..11c85ab 100644
--- a/ot_clean.c
+++ b/ot_clean.c
@@ -20,7 +20,7 @@
20static ssize_t clean_single_bucket( ot_peer *peers, size_t peer_count, time_t timedout, int *removed_seeders ) { 20static ssize_t clean_single_bucket( ot_peer *peers, size_t peer_count, time_t timedout, int *removed_seeders ) {
21 ot_peer *last_peer = peers + peer_count, *insert_point; 21 ot_peer *last_peer = peers + peer_count, *insert_point;
22 time_t timediff; 22 time_t timediff;
23 23
24 /* Two scan modes: unless there is one peer removed, just increase ot_peertime */ 24 /* Two scan modes: unless there is one peer removed, just increase ot_peertime */
25 while( peers < last_peer ) { 25 while( peers < last_peer ) {
26 if( ( timediff = timedout + OT_PEERTIME( peers ) ) >= OT_PEER_TIMEOUT ) 26 if( ( timediff = timedout + OT_PEERTIME( peers ) ) >= OT_PEER_TIMEOUT )
@@ -105,17 +105,19 @@ static void * clean_worker( void * args ) {
105 while( bucket-- ) { 105 while( bucket-- ) {
106 ot_vector *torrents_list = mutex_bucket_lock( bucket ); 106 ot_vector *torrents_list = mutex_bucket_lock( bucket );
107 size_t toffs; 107 size_t toffs;
108 int delta_torrentcount = 0;
108 109
109 for( toffs=0; toffs<torrents_list->size; ++toffs ) { 110 for( toffs=0; toffs<torrents_list->size; ++toffs ) {
110 ot_torrent *torrent = ((ot_torrent*)(torrents_list->data)) + toffs; 111 ot_torrent *torrent = ((ot_torrent*)(torrents_list->data)) + toffs;
111 if( clean_single_torrent( torrent ) ) { 112 if( clean_single_torrent( torrent ) ) {
112 vector_remove_torrent( torrents_list, torrent ); 113 vector_remove_torrent( torrents_list, torrent );
114 delta_torrentcount -= 1;
113 --toffs; continue; 115 --toffs; continue;
114 } 116 }
115 } 117 }
116 mutex_bucket_unlock( bucket ); 118 mutex_bucket_unlock( bucket, delta_torrentcount );
117 if( !g_opentracker_running ) 119 if( !g_opentracker_running )
118 return NULL; 120 return NULL;
119 usleep( OT_CLEAN_SLEEP ); 121 usleep( OT_CLEAN_SLEEP );
120 } 122 }
121 } 123 }