logic: fix crash when running 32 and 64 bit versions in parallel

fixed by making memory name of garbage collector depend on architecture type of sourcetrail binary
This commit is contained in:
malte_langkabel
2017-05-09 15:07:18 +02:00
parent f3de8b5ae4
commit 329544530d
2 changed files with 12 additions and 5 deletions
@@ -4,8 +4,9 @@
#include "utility/logging/logging.h"
#include "utility/TimePoint.h"
#include "utility/utilityApp.h"
std::string SharedMemoryGarbageCollector::s_memoryName = "garbage_collector";
std::string SharedMemoryGarbageCollector::s_memoryNamePrefix = "grbg_cllctr_";
std::string SharedMemoryGarbageCollector::s_instancesKeyName = "running_instances";
std::string SharedMemoryGarbageCollector::s_timeStampsKeyName = "memory_to_timestamps";
@@ -30,7 +31,7 @@ SharedMemoryGarbageCollector* SharedMemoryGarbageCollector::getInstance()
}
SharedMemoryGarbageCollector::SharedMemoryGarbageCollector()
: m_memory(s_memoryName, 65536 /* 64 kB */, SharedMemory::OPEN_OR_CREATE)
: m_memory(getMemoryName(), 65536 /* 64 kB */, SharedMemory::OPEN_OR_CREATE)
, m_loopIsRunning(false)
{
}
@@ -114,8 +115,8 @@ void SharedMemoryGarbageCollector::stop()
if (!otherRunningInstances)
{
LOG_INFO_STREAM(<< "delete garbage collector memory: " << s_memoryName);
SharedMemory::deleteSharedMemory(s_memoryName);
LOG_INFO_STREAM(<< "delete garbage collector memory: " << getMemoryName());
SharedMemory::deleteSharedMemory(getMemoryName());
}
}
@@ -144,6 +145,11 @@ void SharedMemoryGarbageCollector::unregisterSharedMemory(const std::string& sha
update();
}
std::string SharedMemoryGarbageCollector::getMemoryName()
{
return s_memoryNamePrefix + (utility::getApplicationArchitectureType() == APPLICATION_ARCHITECTURE_X86_32 ? "32" : "64");
}
void SharedMemoryGarbageCollector::update()
{
std::lock_guard<std::mutex> lock(m_sharedMemoryNamesMutex);
@@ -27,9 +27,10 @@ public:
void unregisterSharedMemory(const std::string& sharedMemoryName);
private:
static std::string getMemoryName();
void update();
static std::string s_memoryName;
static std::string s_memoryNamePrefix;
static std::string s_instancesKeyName;
static std::string s_timeStampsKeyName;