return kr_ok();
}
-#define reclaim_freelist(list, type, cb) \
- for (unsigned i = 0; i < list.len; ++i) { \
- void *elm = list.at[i]; \
- kr_asan_unpoison(elm, sizeof(type)); \
- cb(elm); \
- } \
- array_clear(list)
+static inline void reclaim_mp_freelist(mp_freelist_t *list)
+{
+ for (unsigned i = 0; i < list->len; ++i) {
+ struct mempool *e = list->at[i];
+ kr_asan_unpoison(e, sizeof(*e));
+ mp_delete(e);
+ }
+ array_clear(*list);
+}
void worker_reclaim(struct worker_ctx *worker)
{
- reclaim_freelist(worker->pool_mp, struct mempool, mp_delete);
+ reclaim_mp_freelist(&worker->pool_mp);
mp_delete(worker->pkt_pool.ctx);
worker->pkt_pool.ctx = NULL;
trie_free(worker->subreq_out);
#define MAX_TCP_INACTIVITY (KR_RESOLVE_TIME_LIMIT + KR_CONN_RTT_MAX)
/** Freelist of available mempools. */
-typedef array_t(void *) mp_freelist_t;
+typedef array_t(struct mempool *) mp_freelist_t;
/** List of query resolution tasks. */
typedef array_t(struct qr_task *) qr_tasklist_t;