utility: Don't shrink shared memory below initial size (issue #636)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user