private void IncreasePageCount(int pageCount)
{
lock (m_syncRoot)
{
bool cloned = false;
Settings settings = m_settings;
if (settings.AddingRequiresClone)
{
cloned = true;
settings = settings.Clone();
}
//If there are not enough pages in the stream, add enough.
while (pageCount > settings.PageCount)
{
int pageIndex;
IntPtr pagePointer;
m_pool.AllocatePage(out pageIndex, out pagePointer);
Memory.Clear(pagePointer, m_pool.PageSize);
settings.AddNewPage(pagePointer, pageIndex);
}
if (cloned)
{
Thread.MemoryBarrier(); // make sure that all of the settings are saved before assigning
m_settings = settings;
}
}
}