]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
xxfix
authorWitold Kręcicki <wpk@isc.org>
Fri, 7 Feb 2020 13:16:37 +0000 (14:16 +0100)
committerWitold Kręcicki <wpk@isc.org>
Fri, 7 Feb 2020 13:16:37 +0000 (14:16 +0100)
lib/ns/client.c
lib/ns/include/ns/client.h

index b41f416eecba0cef859c60bcaa6a29e4ffc462b6..1ee494986fea4d376b23143f395a1ea7e3c61e75 100644 (file)
@@ -2238,6 +2238,7 @@ get_clienttask(ns_clientmgr_t *manager, isc_task_t **taskp) {
 
        int rand = isc_random_uniform(CLIENT_NTASKS_PERCPU);
        int nexttask = (rand * manager->ncpus) + tid;
+       atomic_fetch_add_relaxed(&manager->xbuckets[nexttask], 1);
        isc_task_attach(manager->taskpool[nexttask], taskp);
 }
 
@@ -2415,11 +2416,14 @@ clientmgr_destroy(ns_clientmgr_t *manager) {
        if (manager->excl != NULL)
                isc_task_detach(&manager->excl);
 
+       FILE * f = fopen("/tmp/foo2","w");
        for (i = 0; i < manager->ncpus * CLIENT_NTASKS_PERCPU; i++) {
+               fprintf(f, "%d: %ld\n", i, manager->xbuckets[i]);
                if (manager->taskpool[i] != NULL) {
                        isc_task_detach(&manager->taskpool[i]);
                }
        }
+       fclose(f);
        isc_mem_put(manager->mctx, manager->taskpool,
                    manager->ncpus * CLIENT_NTASKS_PERCPU *
                    sizeof(isc_task_t *));
@@ -2461,6 +2465,7 @@ ns_clientmgr_create(isc_mem_t *mctx, ns_server_t *sctx, isc_taskmgr_t *taskmgr,
        int ntasks = CLIENT_NTASKS_PERCPU * manager->ncpus;
        manager->taskpool = isc_mem_get(mctx, ntasks * sizeof(isc_task_t *));
        for (i = 0; i < ntasks; i++) {
+               atomic_init(&manager->xbuckets[i], 0);
                manager->taskpool[i] = NULL;
                result = isc_task_create_bound(manager->taskmgr, 20,
                                              &manager->taskpool[i],
index 0030df76eff60935ad07ee4de9461575797fbefb..429b8bd7106d02592a4310058a11c294fafcfa9a 100644 (file)
@@ -170,7 +170,8 @@ struct ns_clientmgr {
 
        /* Attached by clients, needed for e.g. recursion */
        isc_task_t **           taskpool;
-
+       atomic_uint_fast32_t    xbuckets[1000];
+       
        ns_interface_t          *interface;
 
        /* Lock covers manager state. */