#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;
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)
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);
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;
}