MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / newBlock

Method newBlock

src/common/classes/alloc.cpp:1995–2026  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1993
1994template <class ListBuilder, class Limits>
1995MemBlock* FreeObjects<ListBuilder, Limits>::newBlock(MemPool* pool, unsigned slot)
1996{
1997 size_t size = Limits::getSize(slot);
1998
1999 if (currentExtent && currentExtent->spaceRemaining < size)
2000 {
2001 // put remaining memory into appr. slots
2002 while (currentExtent->spaceRemaining >= Limits::getSize(0) &&
2003 currentExtent->spaceRemaining > ListBuilder::MEM_OVERHEAD)
2004 {
2005 unsigned sl1 = Limits::getSlot(currentExtent->spaceRemaining, SLOT_FREE);
2006 if (sl1 == ~0u)
2007 break;
2008
2009 unsigned size1 = Limits::getSize(sl1);
2010 MemBlock* b = currentExtent->newBlock(size1);
2011
2012 listBuilder.putElement(&freeObjects[sl1], b);
2013 }
2014 currentExtent->spaceRemaining = 0;
2015 listBuilder.decrUsage(currentExtent, pool);
2016 }
2017
2018 if (!(currentExtent && currentExtent->spaceRemaining))
2019 {
2020 size_t size2 = size;
2021 pool->newExtent(size2, &currentExtent);
2022 currentExtent->incrUsage();
2023 }
2024
2025 return currentExtent->newBlock(size);
2026}
2027
2028template <class ListBuilder, class Limits>
2029FreeObjects<ListBuilder, Limits>::~FreeObjects()

Callers

nothing calls this directly

Calls 4

newExtentMethod · 0.80
putElementMethod · 0.45
decrUsageMethod · 0.45
incrUsageMethod · 0.45

Tested by

no test coverage detected