From 68aa01d300802c5648c74c8baab33020644d9c01 Mon Sep 17 00:00:00 2001 From: Alexander Vdolainen Date: Mon, 17 Sep 2018 20:29:03 +0300 Subject: [PATCH] Added: ndbuf_free_item() function to free in a proper way e.g. free allocated stuff via escan function. --- include/ndbuf/ndbuf.h | 3 +++ ndbuf.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/ndbuf/ndbuf.h b/include/ndbuf/ndbuf.h index 87184f9..3795473 100644 --- a/include/ndbuf/ndbuf.h +++ b/include/ndbuf/ndbuf.h @@ -178,4 +178,7 @@ int ndbuf_cmp(ndbuf_t *, ndbuf_t *); */ int ndbuf_memopt(ndbuf_t *); +/* free in a right way: freing allocated memory during escan */ +void ndbuf_free_item(ndbuf_t *b, void *ip, size_t is); + #endif /* __NDBUF_H__ */ diff --git a/ndbuf.c b/ndbuf.c index c3deaf8..6c0f339 100644 --- a/ndbuf.c +++ b/ndbuf.c @@ -913,4 +913,21 @@ int ndbuf_memopt(ndbuf_t *b) return 0; } +void ndbuf_free_item(ndbuf_t *b, void *ip, size_t is) +{ + if(!b || !ip) return; + + if(__is_moless(b->flags)) return; + + if(__is_usermo(b->flags)) { + if((b->flags & NDBUF_BURN) && (is > 0)) b->mop->zero(ip, is); + b->mop->free(ip); + } else { + if((b->flags & NDBUF_BURN) && (is > 0)) memset(ip, 0, is); + free(ip); + } + + return; +} + #undef DEFAULT_PREALLOC_SIZE