#include <libknot/errcode.h>
#include <libknot/internal/utils.h>
+#include <contrib/ucw/lib.h>
+#include <contrib/ucw/mempool.h>
#include "daemon/io.h"
#include "daemon/network.h"
return;
}
- knot_pkt_t *query = knot_pkt_new(buf->base, nread, worker->mm);
+ knot_pkt_t *query = knot_pkt_new(buf->base, nread, &worker->pkt_pool);
query->max_size = KNOT_WIRE_MAX_PKTSIZE;
worker_exec(worker, (uv_handle_t *)handle, query, addr);
- knot_pkt_free(&query);
+ mp_flush(worker->pkt_pool.ctx);
}
int udp_bind(struct endpoint *ep, struct sockaddr *addr)
return;
}
- knot_pkt_t *query = knot_pkt_new(buf->base + 2, nbytes, worker->mm);
+ knot_pkt_t *query = knot_pkt_new(buf->base + 2, nbytes, &worker->pkt_pool);
query->max_size = sizeof(worker->wire_buf);
int ret = worker_exec(worker, (uv_handle_t *)handle, query, NULL);
if (ret == 0) {
uv_unref((uv_handle_t *)handle);
io_stop_read((uv_handle_t *)handle);
}
- knot_pkt_free(&query);
+ mp_flush(worker->pkt_pool.ctx);
}
static void tcp_accept(uv_stream_t *master, int status)
int worker_reserve(struct worker_ctx *worker, size_t ring_maxlen)
{
array_init(worker->pools);
- return array_reserve(worker->pools, ring_maxlen);
+ array_init(worker->ioreqs);
+ array_reserve(worker->pools, ring_maxlen);
+ array_reserve(worker->ioreqs, ring_maxlen);
+ memset(&worker->pkt_pool, 0, sizeof(worker->pkt_pool));
+ worker->pkt_pool.ctx = mp_new (4 * sizeof(knot_pkt_t));
+ worker->pkt_pool.alloc = (mm_alloc_t) mp_alloc;
+ return kr_ok();
}
#define reclaim_freelist(list, cb) \
{
reclaim_freelist(worker->pools, mp_delete);
reclaim_freelist(worker->ioreqs, free);
+ mp_delete(worker->pkt_pool.ctx);
+ worker->pkt_pool.ctx = NULL;
}