]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
worker: remove freelist for struct session
authorVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 19 Sep 2018 17:14:40 +0000 (19:14 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Fri, 12 Oct 2018 15:36:44 +0000 (17:36 +0200)
See the message in parent commit.

daemon/io.c
daemon/worker.c
daemon/worker.h

index 5cad0057f8d62c0cfdf64b513917eac54e31932b..3ec7283204f4c5a539fbd7c9b8a107ef9ff1f624 100644 (file)
@@ -411,14 +411,12 @@ int io_create(uv_loop_t *loop, uv_handle_t *handle, int type, unsigned family)
        if (ret != 0) {
                return ret;
        }
-       struct worker_ctx *worker = loop->data;
-       struct session *s = worker_session_borrow(worker);
+       struct session *s = session_new();
        assert(s);
        session_set_handle(s, handle);
        uv_timer_t *t = session_get_timer(s);
        t->data = s;
-       uv_timer_init(worker->loop, t);
-       return ret;
+       return uv_timer_init(loop, t);
 }
 
 void io_deinit(uv_handle_t *handle)
@@ -426,21 +424,12 @@ void io_deinit(uv_handle_t *handle)
        if (!handle) {
                return;
        }
-       uv_loop_t *loop = handle->loop;
-       if (loop && loop->data) {
-               struct worker_ctx *worker = loop->data;
-               worker_session_release(worker, handle);
-       } else {
-               session_free(handle->data);
-       }
+       session_free(handle->data);
        handle->data = NULL;
 }
 
 void io_free(uv_handle_t *handle)
 {
-       if (!handle) {
-               return;
-       }
        io_deinit(handle);
        free(handle);
 }
index 4fa08d34a0cd4b34f5e75db482192d9f6432f325..90004649b426a958d4c12d8e9663310db7ad2c10 100644 (file)
@@ -1759,38 +1759,6 @@ void worker_task_timeout_inc(struct qr_task *task)
        task->timeouts += 1;
 }
 
-struct session *worker_session_borrow(struct worker_ctx *worker)
-{
-       struct session *s = NULL;
-       if (worker->pool_sessions.len > 0) {
-               s = array_tail(worker->pool_sessions);
-               array_pop(worker->pool_sessions);
-               kr_asan_custom_unpoison(session, s);
-       } else {
-               s = session_new();
-       }
-       return s;
-}
-
-void worker_session_release(struct worker_ctx *worker, uv_handle_t *handle)
-{
-       if (!worker || !handle) {
-               return;
-       }
-       struct session *s = handle->data;
-       if (!s) {
-               return;
-       }
-       assert(session_is_empty(s));
-       if (worker->pool_sessions.len < MP_FREELIST_SIZE) {
-               session_clear(s);
-               array_push(worker->pool_sessions, s);
-               kr_asan_custom_poison(session, s);
-       } else {
-               session_free(s);
-       }
-}
-
 knot_pkt_t *worker_task_get_pktbuf(const struct qr_task *task)
 {
        return task->pktbuf;
@@ -1815,9 +1783,7 @@ void worker_request_set_source_session(struct request_ctx *ctx, struct session *
 static int worker_reserve(struct worker_ctx *worker, size_t ring_maxlen)
 {
        array_init(worker->pool_mp);
-       array_init(worker->pool_sessions);
-       if (array_reserve(worker->pool_mp, ring_maxlen) ||
-               array_reserve(worker->pool_sessions, ring_maxlen)) {
+       if (array_reserve(worker->pool_mp, ring_maxlen)) {
                return kr_error(ENOMEM);
        }
        memset(&worker->pkt_pool, 0, sizeof(worker->pkt_pool));
@@ -1839,18 +1805,9 @@ static int worker_reserve(struct worker_ctx *worker, size_t ring_maxlen)
        } \
        array_clear(list)
 
-#define reclaim_freelist_custom(list, type, cb) \
-       for (unsigned i = 0; i < list.len; ++i) { \
-               void *elm = list.at[i]; \
-               kr_asan_custom_unpoison(type, elm); \
-               cb(elm); \
-       } \
-       array_clear(list)
-
 void worker_reclaim(struct worker_ctx *worker)
 {
        reclaim_freelist(worker->pool_mp, struct mempool, mp_delete);
-       reclaim_freelist_custom(worker->pool_sessions, session, session_free);
        mp_delete(worker->pkt_pool.ctx);
        worker->pkt_pool.ctx = NULL;
        trie_free(worker->subreq_out);
index 733f62cdec9b64acdb50785efc95ce7783bd6579..5814a4bd37f56b035b3cfb3ad793691627a7bac5 100644 (file)
@@ -70,10 +70,6 @@ struct kr_request *worker_task_request(struct qr_task *task);
 /** Collect worker mempools */
 void worker_reclaim(struct worker_ctx *worker);
 
-struct session *worker_session_borrow(struct worker_ctx *worker);
-
-void worker_session_release(struct worker_ctx *worker, uv_handle_t *handle);
-
 int worker_task_step(struct qr_task *task, const struct sockaddr *packet_source,
                     knot_pkt_t *packet);
 
@@ -159,7 +155,6 @@ struct worker_ctx {
        /** Subrequest leaders (struct qr_task*), indexed by qname+qtype+qclass. */
        trie_t *subreq_out;
        mp_freelist_t pool_mp;
-       mp_freelist_t pool_sessions;
        knot_mm_t pkt_pool;
 };