]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
wip; wipwip
authorŠtěpán Balážik <stepan.balazik@nic.cz>
Fri, 28 May 2021 20:33:23 +0000 (22:33 +0200)
committerŠtěpán Balážik <stepan.balazik@nic.cz>
Fri, 28 May 2021 20:33:23 +0000 (22:33 +0200)
daemon/main.c
daemon/worker.c
daemon/worker.h

index 66365e274057b43ee0598ad0ec0f4e07201190ad..0a3b3dab7f7ba496fec226e790df6fe191957f36 100644 (file)
@@ -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();
index c71192e0a5bc863a3e35becd3d0d0b870d587d1d..a869a9690513a3093916da9c0f28bdcfcc9eff08 100644 (file)
@@ -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);
index 8df997d3610b47f33acc20d6ef76561326f986db..cc049a21902b982ce1a8567735f43aabc2221e86 100644 (file)
@@ -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 */