MCPcopy Create free account
hub / github.com/Singular/Singular / omFreeTrackAddr

Function omFreeTrackAddr

omalloc/omDebugTrack.c:409–444  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

407}
408
409void omFreeTrackAddr(void* d_addr)
410{
411 omBinPage page;
412 omBin bin;
413
414 omAssume(omIsBinPageAddr(d_addr));
415 omAssume(d_addr != NULL && omIsTrackAddr(d_addr));
416 d_addr = omOutAddr_2_TrackAddr(d_addr);
417
418 page = omGetBinPageOfAddr((void*) d_addr);
419 bin = omGetTopBinOfPage(page);
420 /* Ok, here is how it works:
421 1. we unset the first bit of used_blocks
422 ==> used_blocks >= 0
423 2. we do a normal free
424 3. if page of addr was freed, then om_JustFreedPage
425 is != NULL ==> nothing to be done by us
426 else
427 page is still active ==> reset first bit of used_blocks
428 */
429
430 omUnsetTrackOfUsedBlocks(page->used_blocks);
431
432 om_JustFreedPage = NULL;
433
434 __omFreeBinAddr(d_addr);
435
436 if (page != om_JustFreedPage)
437 omSetTrackOfUsedBlocks(page->used_blocks);
438 else
439 {
440 /* Still need to check whether we need to get rid of SpecBin */
441 if (bin->last_page == NULL && ! omIsStaticTrackBin(bin))
442 omDeleteSpecBin(&bin);
443 }
444}
445
446/*******************************************************************
447 *

Callers 4

__omDebugFreeFunction · 0.85
omFreeKeptAddrFromBinFunction · 0.85
omFreeKeptAddrFunction · 0.85
omFreeToPageFaultFunction · 0.85

Calls 1

omOutAddr_2_TrackAddrFunction · 0.85

Tested by

no test coverage detected