From: Štěpán Balážik Date: Fri, 28 May 2021 20:33:23 +0000 (+0200) Subject: wip; X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=409d2f9692c404fd7ec41db6d48ced28b9d3ae50;p=thirdparty%2Fknot-resolver.git wip; --- diff --git a/daemon/main.c b/daemon/main.c index 66365e274..0a3b3dab7 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -403,6 +403,11 @@ static void drop_capabilities(void) #endif /* ENABLE_CAP_NG */ } +int print_task(const char *t, void *p, void *pp) { + printf("%p\n", t); + return 0; +} + int main(int argc, char **argv) { if (setvbuf(stdout, NULL, _IONBF, 0) || setvbuf(stderr, NULL, _IONBF, 0)) { @@ -579,11 +584,7 @@ int main(int argc, char **argv) ret = run_worker(loop, &engine, fork_id == 0, the_args); cleanup:/* Cleanup. */ - for (int j=0; j<1<<20; j++) { - if (the_worker->tasks[j] && the_worker->tasks[j]->refs) { - printf("%p\n", the_worker->tasks[j]); - } - } + set_walk(&the_worker->tasks, print_task, NULL); printf("bye!"); engine_deinit(&engine); worker_deinit(); diff --git a/daemon/worker.c b/daemon/worker.c index c71192e0a..a869a9690 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -485,15 +485,18 @@ static struct qr_task *qr_task_create(struct request_ctx *ctx) qr_task_ref(task); task->creation_time = kr_now(); ctx->worker->stats.concurrent += 1; - the_worker->tasks[the_worker->task_index] = task; - the_worker->task_index++; - the_worker->task_index %= 1<<20; + char addr[9] = {0}; + memcpy(addr, &task, 8); + set_add(&the_worker->tasks, addr); return task; } /* This is called when the task refcount is zero, free memory. */ static void qr_task_free(struct qr_task *task) { + char addr[9] = {0}; + memcpy(addr, &task, 8); + set_del(&the_worker->tasks, addr); struct request_ctx *ctx = task->ctx; assert(ctx); diff --git a/daemon/worker.h b/daemon/worker.h index 8df997d36..cc049a219 100644 --- a/daemon/worker.h +++ b/daemon/worker.h @@ -7,6 +7,7 @@ #include "daemon/engine.h" #include "lib/generic/array.h" #include "lib/generic/map.h" +#include "lib/generic/set.h" /** Query resolution task (opaque). */ @@ -207,8 +208,7 @@ struct worker_ctx { knot_mm_t pkt_pool; unsigned int next_request_uid; - struct qr_task *tasks[1<<20]; - int task_index; + set_t tasks; }; /** @endcond */