diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 5173b7aec..a8bd50591 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -621,8 +621,8 @@ void multiSlsDetector::freeSharedMemory(int multiId) { int numDetectors = 0; SharedMemory* shm = new SharedMemory(multiId, -1); - // shm not created before - if (SharedMemory::IsExisting(shm->GetName())) { + // get number of detectors from multi shm + if (shm->IsExisting()) { sharedMultiSlsDetector* mdet = (sharedMultiSlsDetector*)shm->OpenSharedMemory( sizeof(sharedMultiSlsDetector)); numDetectors = mdet->numberOfDetectors; @@ -715,7 +715,7 @@ bool multiSlsDetector::initSharedMemory(bool verify) { bool created = false; sharedMemory = new SharedMemory(detId, -1); - if (SharedMemory::IsExisting(sharedMemory->GetName())) { + if (sharedMemory->IsExisting()) { thisMultiDetector = (sharedMultiSlsDetector*)sharedMemory->OpenSharedMemory(sz); if (verify && thisMultiDetector->shmversion != MULTI_SHMVERSION) { cprintf(RED, "Multi shared memory (%d) version mismatch " diff --git a/slsDetectorSoftware/sharedMemory/SharedMemory.cpp b/slsDetectorSoftware/sharedMemory/SharedMemory.cpp index c6660c441..ae05404ac 100644 --- a/slsDetectorSoftware/sharedMemory/SharedMemory.cpp +++ b/slsDetectorSoftware/sharedMemory/SharedMemory.cpp @@ -28,13 +28,13 @@ SharedMemory::~SharedMemory(){ } -bool SharedMemory::IsExisting(std::string name) { +bool SharedMemory::IsExisting() { bool ret = true; - int fd = shm_open(name.c_str(), O_RDWR, 0); - if ((fd < 0) && (errno == ENOENT)) { + int tempfd = shm_open(name.c_str(), O_RDWR, 0); + if ((tempfd < 0) && (errno == ENOENT)) { ret = false; } - close(fd); + close(tempfd); return ret; } @@ -61,7 +61,9 @@ void* SharedMemory::CreateSharedMemory(size_t sz){ } // map - return MapSharedMemory(sz); + void* addr = MapSharedMemory(sz); + printf("Shared memory created %s \n", name.c_str()); + return addr; } void* SharedMemory::OpenSharedMemory(size_t sz){ @@ -87,7 +89,15 @@ void SharedMemory::UnmapSharedMemory(void* addr) { } void SharedMemory::RemoveSharedMemory() { - RemoveSharedMemory(name.c_str()); + if (shm_unlink(name.c_str()) < 0) { + // silent exit if shm did not exist anyway + if (errno == ENOENT) + return; + cprintf(RED, "Error: Free Shared Memory %s Failed: %s\n", + name.c_str(), strerror(errno)); + throw SharedMemoryException(); + } + printf("Shared memory deleted %s \n", name.c_str()); } @@ -146,15 +156,3 @@ int SharedMemory::VerifySizeMatch(size_t expectedSize) { return 0; } -void SharedMemory::RemoveSharedMemory(std::string name) { - if (shm_unlink(name.c_str()) < 0) { - // silent exit if shm did not exist anyway - if (errno == ENOENT) - return; - cprintf(RED, "Error: Free Shared Memory %s Failed: %s\n", - name.c_str(), strerror(errno)); - throw SharedMemoryException(); - } - printf("Shared memory deleted %s \n", name.c_str()); -} - diff --git a/slsDetectorSoftware/sharedMemory/SharedMemory.h b/slsDetectorSoftware/sharedMemory/SharedMemory.h index 24977d49f..ebec18606 100644 --- a/slsDetectorSoftware/sharedMemory/SharedMemory.h +++ b/slsDetectorSoftware/sharedMemory/SharedMemory.h @@ -31,7 +31,7 @@ public: * @param name of shared memory * @return true if exists, else false */ - static bool IsExisting(std::string name); + bool IsExisting(); /** * Get shared memory name @@ -93,12 +93,6 @@ private: */ int VerifySizeMatch(size_t expectedSize); - /** - * Remove existing Shared memory - * @param name name of shared memory (should be less than NAME_MAX) - */ - void RemoveSharedMemory(std::string name); - /** Shared memory name */ std::string name; diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index d91b102c8..d74201ac6 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -46,7 +46,7 @@ slsDetector::slsDetector(detectorType type, int multiId, int id, bool verify, mu // ensure shared memory was not created before SharedMemory* shm = new SharedMemory(multiId, id); - if (SharedMemory::IsExisting(shm->GetName())) { + if (shm->IsExisting()) { cprintf(YELLOW BOLD,"Warning: Weird, this shared memory should have been " "deleted before! %s. Freeing it again.\n", shm->GetName().c_str()); freeSharedMemory(multiId, id); @@ -1250,7 +1250,7 @@ int slsDetector::receiveModule(sls_detector_module* myMod) { slsReceiverDefs::detectorType slsDetector::getDetectorTypeFromShm(int multiId, bool verify) { SharedMemory* shm = new SharedMemory(multiId, detId); // shm not created before - if (!SharedMemory::IsExisting(shm->GetName())) { + if (!shm->IsExisting()) { cprintf(RED,"Shared memory %s does not exist.\n" "Corrupted Multi Shared memory. Please free shared memory.\n", shm->GetName().c_str());