utility: Don't shrink shared memory below initial size (issue #636)

This commit is contained in:
Eberhard Graether
2018-11-27 13:18:07 +01:00
parent f7ee5d0d39
commit db69b45c58
2 changed files with 17 additions and 0 deletions
@@ -10,6 +10,7 @@ SharedMemory::ScopedAccess::ScopedAccess(SharedMemory* memory)
: boost::interprocess::scoped_lock<boost::interprocess::named_mutex>(memory->getMutex())
, m_memory(boost::interprocess::open_only, memory->getMemoryName().c_str())
, m_memoryName(memory->getMemoryName())
, m_minimumMemorySize(memory->getInitialMemorySize())
{
}
@@ -48,6 +49,11 @@ void SharedMemory::ScopedAccess::growMemory(size_t size)
void SharedMemory::ScopedAccess::shrinkToFitMemory()
{
if (getUsedMemorySize() < m_minimumMemorySize)
{
return;
}
m_memory = boost::interprocess::managed_shared_memory();
boost::interprocess::managed_shared_memory::shrink_to_fit(m_memoryName.c_str());
@@ -97,6 +103,7 @@ void SharedMemory::deleteSharedMemory(const std::string& name)
SharedMemory::SharedMemory(const std::string& name, size_t initialMemorySize, AccessMode mode)
: m_name(checkName(name))
, m_mode(mode)
, m_initialMemorySize(initialMemorySize)
{
try
{
@@ -229,3 +236,8 @@ boost::interprocess::named_mutex& SharedMemory::getMutex()
return *m_mutex.get();
}
size_t SharedMemory::getInitialMemorySize() const
{
return m_initialMemorySize;
}
@@ -99,6 +99,7 @@ public:
private:
boost::interprocess::managed_shared_memory m_memory;
std::string m_memoryName;
size_t m_minimumMemorySize;
};
bool checkSharedMutex();
@@ -112,9 +113,13 @@ private:
boost::interprocess::named_mutex& getMutex();
size_t getInitialMemorySize() const;
std::shared_ptr<boost::interprocess::named_mutex> m_mutex;
std::string m_name;
AccessMode m_mode;
size_t m_initialMemorySize;
};
#endif // SHARED_MEMORY_H