diff options
Diffstat (limited to 'ot_fullscrape.c')
| -rw-r--r-- | ot_fullscrape.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/ot_fullscrape.c b/ot_fullscrape.c index a86d6d7..ae29308 100644 --- a/ot_fullscrape.c +++ b/ot_fullscrape.c | |||
| @@ -23,6 +23,7 @@ | |||
| 23 | #include "ot_fullscrape.h" | 23 | #include "ot_fullscrape.h" |
| 24 | #include "ot_iovec.h" | 24 | #include "ot_iovec.h" |
| 25 | #include "ot_mutex.h" | 25 | #include "ot_mutex.h" |
| 26 | #include "ot_workqueue.h" | ||
| 26 | #include "ot_urlencoded.h" | 27 | #include "ot_urlencoded.h" |
| 27 | #include "trackerlogic.h" | 28 | #include "trackerlogic.h" |
| 28 | 29 | ||
| @@ -54,7 +55,7 @@ static void *fullscrape_worker(void *args) { | |||
| 54 | 55 | ||
| 55 | while (g_opentracker_running) { | 56 | while (g_opentracker_running) { |
| 56 | ot_tasktype tasktype = TASK_FULLSCRAPE; | 57 | ot_tasktype tasktype = TASK_FULLSCRAPE; |
| 57 | ot_taskid taskid = mutex_workqueue_poptask(&tasktype); | 58 | ot_taskid taskid = workqueue_poptask(&tasktype); |
| 58 | if (!taskid) | 59 | if (!taskid) |
| 59 | break; | 60 | break; |
| 60 | #ifdef WANT_COMPRESSION_ZSTD | 61 | #ifdef WANT_COMPRESSION_ZSTD |
| @@ -68,7 +69,7 @@ static void *fullscrape_worker(void *args) { | |||
| 68 | else | 69 | else |
| 69 | #endif | 70 | #endif |
| 70 | fullscrape_make(taskid, tasktype); | 71 | fullscrape_make(taskid, tasktype); |
| 71 | mutex_workqueue_pushchunked(taskid, NULL); | 72 | workqueue_pushchunked(taskid, NULL); |
| 72 | } | 73 | } |
| 73 | return NULL; | 74 | return NULL; |
| 74 | } | 75 | } |
| @@ -79,12 +80,12 @@ void fullscrape_init(void) { | |||
| 79 | } | 80 | } |
| 80 | 81 | ||
| 81 | void fullscrape_deinit(void) { | 82 | void fullscrape_deinit(void) { |
| 82 | mutex_workqueue_wakeall(); | 83 | workqueue_wakeall(); |
| 83 | pthread_join( thread_id, NULL ); | 84 | pthread_join( thread_id, NULL ); |
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | void fullscrape_deliver( int64_t sock, ot_tasktype tasktype ) { | 87 | void fullscrape_deliver( int64_t sock, ot_tasktype tasktype ) { |
| 87 | mutex_workqueue_pushtask( sock, TASK_FULLSCRAPE | tasktype ); | 88 | workqueue_pushtask( sock, TASK_FULLSCRAPE | tasktype ); |
| 88 | } | 89 | } |
| 89 | 90 | ||
| 90 | static void fullscrape_write_one( ot_tasktype mode, char **cursor, ot_torrent *torrent, ot_hash *hash ) { | 91 | static void fullscrape_write_one( ot_tasktype mode, char **cursor, ot_torrent *torrent, ot_hash *hash ) { |
| @@ -170,7 +171,7 @@ static void fullscrape_make(int taskid, ot_tasktype mode) { | |||
| 170 | if (r > re) { | 171 | if (r > re) { |
| 171 | iovector.iov_len = r - (char *)iovector.iov_base; | 172 | iovector.iov_len = r - (char *)iovector.iov_base; |
| 172 | 173 | ||
| 173 | if (mutex_workqueue_pushchunked(taskid, &iovector)) { | 174 | if (workqueue_pushchunked(taskid, &iovector)) { |
| 174 | free(iovector.iov_base); | 175 | free(iovector.iov_base); |
| 175 | mutex_bucket_unlock(bucket, 0); | 176 | mutex_bucket_unlock(bucket, 0); |
| 176 | return; | 177 | return; |
| @@ -200,7 +201,7 @@ static void fullscrape_make(int taskid, ot_tasktype mode) { | |||
| 200 | 201 | ||
| 201 | /* Send rest of data */ | 202 | /* Send rest of data */ |
| 202 | iovector.iov_len = r - (char *)iovector.iov_base; | 203 | iovector.iov_len = r - (char *)iovector.iov_base; |
| 203 | if (mutex_workqueue_pushchunked(taskid, &iovector)) | 204 | if (workqueue_pushchunked(taskid, &iovector)) |
| 204 | free(iovector.iov_base); | 205 | free(iovector.iov_base); |
| 205 | } | 206 | } |
| 206 | 207 | ||
| @@ -251,7 +252,7 @@ static void fullscrape_make_gzip(int taskid, ot_tasktype mode) { | |||
| 251 | while (!strm.avail_out) { | 252 | while (!strm.avail_out) { |
| 252 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; | 253 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; |
| 253 | 254 | ||
| 254 | if (mutex_workqueue_pushchunked(taskid, &iovector)) { | 255 | if (workqueue_pushchunked(taskid, &iovector)) { |
| 255 | free(iovector.iov_base); | 256 | free(iovector.iov_base); |
| 256 | mutex_bucket_unlock(bucket, 0); | 257 | mutex_bucket_unlock(bucket, 0); |
| 257 | return; | 258 | return; |
| @@ -291,7 +292,7 @@ static void fullscrape_make_gzip(int taskid, ot_tasktype mode) { | |||
| 291 | fprintf(stderr, "deflate() failed while in fullscrape_make()'s endgame.\n"); | 292 | fprintf(stderr, "deflate() failed while in fullscrape_make()'s endgame.\n"); |
| 292 | 293 | ||
| 293 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; | 294 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; |
| 294 | if (mutex_workqueue_pushchunked(taskid, &iovector)) { | 295 | if (workqueue_pushchunked(taskid, &iovector)) { |
| 295 | free(iovector.iov_base); | 296 | free(iovector.iov_base); |
| 296 | deflateEnd(&strm); | 297 | deflateEnd(&strm); |
| 297 | return; | 298 | return; |
| @@ -314,7 +315,7 @@ static void fullscrape_make_gzip(int taskid, ot_tasktype mode) { | |||
| 314 | 315 | ||
| 315 | /* Only pass the new buffer if there actually was some data left in the buffer */ | 316 | /* Only pass the new buffer if there actually was some data left in the buffer */ |
| 316 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; | 317 | iovector.iov_len = (char *)strm.next_out - (char *)iovector.iov_base; |
| 317 | if (!iovector.iov_len || mutex_workqueue_pushchunked(taskid, &iovector)) | 318 | if (!iovector.iov_len || workqueue_pushchunked(taskid, &iovector)) |
| 318 | free(iovector.iov_base); | 319 | free(iovector.iov_base); |
| 319 | } | 320 | } |
| 320 | 321 | ||
| @@ -380,7 +381,7 @@ static void fullscrape_make_zstd(int taskid, ot_tasktype mode) { | |||
| 380 | while (outbuf.pos + OT_SCRAPE_MAXENTRYLEN > outbuf.size) { | 381 | while (outbuf.pos + OT_SCRAPE_MAXENTRYLEN > outbuf.size) { |
| 381 | iovector.iov_len = outbuf.size; | 382 | iovector.iov_len = outbuf.size; |
| 382 | 383 | ||
| 383 | if (mutex_workqueue_pushchunked(taskid, &iovector)) { | 384 | if (workqueue_pushchunked(taskid, &iovector)) { |
| 384 | free(iovector.iov_base); | 385 | free(iovector.iov_base); |
| 385 | ZSTD_freeCCtx(zstream); | 386 | ZSTD_freeCCtx(zstream); |
| 386 | return mutex_bucket_unlock(bucket, 0); | 387 | return mutex_bucket_unlock(bucket, 0); |
| @@ -418,7 +419,7 @@ static void fullscrape_make_zstd(int taskid, ot_tasktype mode) { | |||
| 418 | more_bytes = ZSTD_compressStream2(zstream, &outbuf, &inbuf, ZSTD_e_end); | 419 | more_bytes = ZSTD_compressStream2(zstream, &outbuf, &inbuf, ZSTD_e_end); |
| 419 | 420 | ||
| 420 | iovector.iov_len = outbuf.pos; | 421 | iovector.iov_len = outbuf.pos; |
| 421 | if (mutex_workqueue_pushchunked(taskid, &iovector)) { | 422 | if (workqueue_pushchunked(taskid, &iovector)) { |
| 422 | free(iovector.iov_base); | 423 | free(iovector.iov_base); |
| 423 | ZSTD_freeCCtx(zstream); | 424 | ZSTD_freeCCtx(zstream); |
| 424 | return; | 425 | return; |
| @@ -443,7 +444,7 @@ static void fullscrape_make_zstd(int taskid, ot_tasktype mode) { | |||
| 443 | 444 | ||
| 444 | /* Only pass the new buffer if there actually was some data left in the buffer */ | 445 | /* Only pass the new buffer if there actually was some data left in the buffer */ |
| 445 | iovector.iov_len = outbuf.pos; | 446 | iovector.iov_len = outbuf.pos; |
| 446 | if (!iovector.iov_len || mutex_workqueue_pushchunked(taskid, &iovector)) | 447 | if (!iovector.iov_len || workqueue_pushchunked(taskid, &iovector)) |
| 447 | free(iovector.iov_base); | 448 | free(iovector.iov_base); |
| 448 | } | 449 | } |
| 449 | 450 | ||
