MCPcopy Create free account
hub / github.com/OpenDDS/OpenDDS / join_free_allocs

Method join_free_allocs

dds/DCPS/MemoryPool.cpp:407–435  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

405}
406
407void
408MemoryPool::join_free_allocs(FreeHeader* freed)
409{
410 // Check adjacent
411 if (joinable_next(freed)) {
412 FreeHeader* next_free = reinterpret_cast<FreeHeader*>(freed->next_adjacent());
413 remove_free_alloc(next_free);
414 freed->join_next();
415 // Adjust psize of adjacent
416 AllocHeader* next = freed->next_adjacent();
417 if (includes(next)) {
418 next->set_prev_size(static_cast<int>(freed->size()));
419 }
420 }
421 if (joinable_prev(freed)) {
422 FreeHeader* prev_free = reinterpret_cast<FreeHeader*>(freed->prev_adjacent());
423 remove_free_alloc(prev_free);
424 // Join prev with freed
425 prev_free->join_next();
426 insert_free_alloc(prev_free);
427 // Adjust psize of adjacent
428 AllocHeader* next = prev_free->next_adjacent();
429 if (includes(next)) {
430 next->set_prev_size(static_cast<int>(prev_free->size()));
431 }
432 } else {
433 insert_free_alloc(freed);
434 }
435}
436
437void
438MemoryPool::remove_free_alloc(FreeHeader* block_to_alloc)

Callers

nothing calls this directly

Calls 5

includesFunction · 0.85
next_adjacentMethod · 0.80
join_nextMethod · 0.80
prev_adjacentMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected