QmlDesigner: Use Q_GLOBAL_STATIC_WITH_ARGS for the global hash

To be sure that the shared memories are removed at process exit.
And fix that createSharedMemory reuse possible already existing shared
memories now. ("take" -> "[]")

Change-Id: Idcc99ba42b862b862d5403ecf3b781a27fdf757f
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
This commit is contained in:
Tim Jenssen
2014-08-05 14:00:21 +02:00
committed by Thomas Hartmann
parent b2ac3fd90c
commit 0370fa214a
2 changed files with 14 additions and 8 deletions

View File

@@ -37,7 +37,9 @@
namespace QmlDesigner {
static QCache<qint32, SharedMemory> globalSharedMemoryCache(10000);
// using cache as a container which deletes sharedmemory pointers at process exit
typedef QCache<qint32, SharedMemory> GlobalSharedMemoryContainer;
Q_GLOBAL_STATIC_WITH_ARGS(GlobalSharedMemoryContainer, globalSharedMemoryContainer, (10000))
ValuesChangedCommand::ValuesChangedCommand()
: m_keyNumber(0)
@@ -63,7 +65,7 @@ quint32 ValuesChangedCommand::keyNumber() const
void ValuesChangedCommand::removeSharedMemorys(const QVector<qint32> &keyNumberVector)
{
foreach (qint32 keyNumber, keyNumberVector) {
SharedMemory *sharedMemory = globalSharedMemoryCache.take(keyNumber);
SharedMemory *sharedMemory = globalSharedMemoryContainer()->take(keyNumber);
delete sharedMemory;
}
}
@@ -82,8 +84,10 @@ static SharedMemory *createSharedMemory(qint32 key, int byteCount)
bool sharedMemoryIsCreated = sharedMemory->create(byteCount);
if (sharedMemoryIsCreated) {
globalSharedMemoryCache.insert(key, sharedMemory);
globalSharedMemoryContainer()->insert(key, sharedMemory);
return sharedMemory;
} else {
delete sharedMemory;
}
return 0;