MCPcopy Create free account
hub / github.com/beefytech/Beef / DeleteArena

Method DeleteArena

BeefRT/gperftools/src/base/low_level_alloc.cc:314–346  ·  view source on GitHub ↗

L < arena->mu, L < arena->arena->mu

Source from the content-addressed store, hash-verified

312
313// L < arena->mu, L < arena->arena->mu
314bool LowLevelAlloc::DeleteArena(Arena *arena) {
315 RAW_CHECK(arena != 0 && arena != &default_arena && arena != &unhooked_arena,
316 "may not delete default arena");
317 ArenaLock section(arena);
318 bool empty = (arena->allocation_count == 0);
319 section.Leave();
320 if (empty) {
321 while (arena->freelist.next[0] != 0) {
322 AllocList *region = arena->freelist.next[0];
323 size_t size = region->header.size;
324 arena->freelist.next[0] = region->next[0];
325 RAW_CHECK(region->header.magic ==
326 Magic(kMagicUnallocated, &region->header),
327 "bad magic number in DeleteArena()");
328 RAW_CHECK(region->header.arena == arena,
329 "bad arena pointer in DeleteArena()");
330 RAW_CHECK(size % arena->pagesize == 0,
331 "empty arena has non-page-aligned block size");
332 RAW_CHECK(reinterpret_cast<intptr_t>(region) % arena->pagesize == 0,
333 "empty arena has non-page-aligned block");
334 int munmap_result;
335 if ((arena->flags & LowLevelAlloc::kAsyncSignalSafe) == 0) {
336 munmap_result = munmap(region, size);
337 } else {
338 munmap_result = MallocHook::UnhookedMUnmap(region, size);
339 }
340 RAW_CHECK(munmap_result == 0,
341 "LowLevelAlloc::DeleteArena: munmap failed address");
342 }
343 Free(arena);
344 }
345 return empty;
346}
347
348// ---------------------------------------------------------------------------
349

Callers

nothing calls this directly

Calls 3

MagicFunction · 0.70
munmapFunction · 0.50
LeaveMethod · 0.45

Tested by

no test coverage detected