From cc386ead87f5b5cd17b248e3e1ff2b10b0420a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Vavru=C5=A1a?= <marek.vavrusa@nic.cz> Date: Wed, 31 Dec 2014 01:27:12 +0100 Subject: [PATCH] worker: caller now creates (optional) cache --- daemon/worker.c | 21 +++++++++++++++++++-- daemon/worker.h | 2 +- lib/context.c | 19 +++++++++++-------- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index e61050190..2cbdb3590 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -23,6 +23,9 @@ #include "daemon/worker.h" #include "daemon/layer/query.h" +/* Defines */ +#define CACHE_DEFAULT_SIZE 10*1024*1024 + static void buf_alloc(uv_handle_t* handle, size_t suggested_size, uv_buf_t* buf) { struct worker_ctx *worker = handle->data; @@ -86,12 +89,26 @@ static void worker_recv(uv_udp_t *handle, ssize_t nread, const uv_buf_t *buf, knot_pkt_free(&answer); } -void worker_init(struct worker_ctx *worker, mm_ctx_t *mm) +int worker_init(struct worker_ctx *worker, mm_ctx_t *mm) { memset(worker, 0, sizeof(struct worker_ctx)); worker->pool = mm; - kr_context_init(&worker->resolve, mm); + /* Open resolution context */ + int ret = kr_context_init(&worker->resolve, mm); + if (ret != KNOT_EOK) { + return ret; + } + + /* Open resolution context cache */ + worker->resolve.cache = kr_cache_open("/tmp/kresolved", mm, CACHE_DEFAULT_SIZE); + if (worker->resolve.cache == NULL) { + fprintf(stderr, "Cache directory '/tmp/kresolved' not exists, exitting.\n"); + kr_context_deinit(&worker->resolve); + return KNOT_ERROR; + } + + return KNOT_EOK; } void worker_deinit(struct worker_ctx *worker) diff --git a/daemon/worker.h b/daemon/worker.h index 6047ba58b..32b57fe40 100644 --- a/daemon/worker.h +++ b/daemon/worker.h @@ -26,7 +26,7 @@ struct worker_ctx { mm_ctx_t *pool; }; -void worker_init(struct worker_ctx *worker, mm_ctx_t *mm); +int worker_init(struct worker_ctx *worker, mm_ctx_t *mm); void worker_deinit(struct worker_ctx *worker); void worker_start(uv_udp_t *req, struct worker_ctx *worker); void worker_stop(uv_udp_t *req); diff --git a/lib/context.c b/lib/context.c index dd3139cb5..9de4c3d65 100644 --- a/lib/context.c +++ b/lib/context.c @@ -23,22 +23,25 @@ int kr_context_init(struct kr_context *ctx, mm_ctx_t *mm) { - memset(ctx, 0, sizeof(struct kr_context)); + if (ctx == NULL) { + return KNOT_EINVAL; + } + memset(ctx, 0, sizeof(struct kr_context)); ctx->pool = mm; - ctx->cache = kr_cache_open("/tmp/kresolved", mm); - if (ctx->cache == NULL) { - fprintf(stderr, "Cache directory '/tmp/kresolved' not exists, exitting.\n"); - return KNOT_ERROR; - } - return KNOT_EOK; } int kr_context_deinit(struct kr_context *ctx) { - kr_cache_close(ctx->cache); + if (ctx == NULL) { + return KNOT_EINVAL; + } + + if (ctx->cache) { + kr_cache_close(ctx->cache); + } return KNOT_EOK; } -- GitLab