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