MCPcopy Create free account
hub / github.com/bloomberg/comdb2 / mspace_free

Function mspace_free

dlmalloc/dlmalloc.c:4955–5047  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4953}
4954
4955void mspace_free(mspace msp, void* mem) {
4956 if (mem != 0) {
4957 size_t psize = 0;
4958 mchunkptr p = mem2chunk(mem);
4959#if FOOTERS
4960 mstate fm = get_mstate_for(p);
4961#else /* FOOTERS */
4962 mstate fm = (mstate)msp;
4963#endif /* FOOTERS */
4964 if (!ok_magic(fm)) {
4965 USAGE_ERROR_ACTION(fm, p);
4966 return;
4967 }
4968 if (!PREACTION(fm)) {
4969 check_inuse_chunk(fm, p);
4970 if (RTCHECK(ok_address(fm, p) && ok_cinuse(p))) {
4971 psize = chunksize(p);
4972 mchunkptr next = chunk_plus_offset(p, psize);
4973 if (!pinuse(p)) {
4974 size_t prevsize = p->prev_foot;
4975 if ((prevsize & IS_MMAPPED_BIT) != 0) {
4976 prevsize &= ~IS_MMAPPED_BIT;
4977 psize += prevsize + MMAP_FOOT_PAD;
4978 if (CALL_MUNMAP((char*)p - prevsize, psize) == 0)
4979 fm->footprint -= psize;
4980 goto postaction;
4981 }
4982 else {
4983 mchunkptr prev = chunk_minus_offset(p, prevsize);
4984 psize += prevsize;
4985 p = prev;
4986 if (RTCHECK(ok_address(fm, prev))) { /* consolidate backward */
4987 if (p != fm->dv) {
4988 unlink_chunk(fm, p, prevsize);
4989 }
4990 else if ((next->head & INUSE_BITS) == INUSE_BITS) {
4991 fm->dvsize = psize;
4992 set_free_with_pinuse(p, psize, next);
4993 goto postaction;
4994 }
4995 }
4996 else
4997 goto erroraction;
4998 }
4999 }
5000
5001 if (RTCHECK(ok_next(p, next) && ok_pinuse(next))) {
5002 if (!cinuse(next)) { /* consolidate forward */
5003 if (next == fm->top) {
5004 size_t tsize = fm->topsize += psize;
5005 fm->top = p;
5006 p->head = tsize | PINUSE_BIT;
5007 if (p == fm->dv) {
5008 fm->dv = 0;
5009 fm->dvsize = 0;
5010 }
5011 if (should_trim(fm, tsize))
5012 sys_trim(fm, 0, 0);

Callers 10

internal_mspace_reallocFunction · 0.85
comdb2ma_exitFunction · 0.85
comdb2ma_statsFunction · 0.85
comdb2_free_intFunction · 0.85
comdb2ma_create_intFunction · 0.85
comdb2ma_destroy_intFunction · 0.85
destroy_zoneFunction · 0.85
ma_pair_cleanFunction · 0.85
comdb2bma_create_traceFunction · 0.85
comdb2bma_destroyFunction · 0.85

Calls 1

sys_trimFunction · 0.85

Tested by

no test coverage detected