diff --git a/daemon/worker.c b/daemon/worker.c index e610501906668fd9286738ca8ed3722391f7dd5f..2cbdb359099b94101854b651dd9ae12c22855af7 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 6047ba58b7cc2ff8bdf6459ea28ae51531ef14d7..32b57fe40a9264b26be59ddc07ced73b9724f849 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 dd3139cb58960659e9a3e3aadb47d3fce9201849..9de4c3d65e42bd91faa3fe778f12f44f02b90965 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; }