diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index e65840899..c65096b2e 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -37,7 +37,7 @@ void freeSharedMemory(int detectorIndex, int moduleIndex) { int numDetectors = 0; if (detectorShm.exists()) { - detectorShm.openSharedMemory(); + detectorShm.openSharedMemory(false); numDetectors = detectorShm()->numberOfModules; detectorShm.removeSharedMemory(); } diff --git a/slsDetectorSoftware/src/DetectorImpl.cpp b/slsDetectorSoftware/src/DetectorImpl.cpp index 45e1a1373..4ff05ce11 100644 --- a/slsDetectorSoftware/src/DetectorImpl.cpp +++ b/slsDetectorSoftware/src/DetectorImpl.cpp @@ -47,7 +47,7 @@ void DetectorImpl::setupDetector(bool verify, bool update) { } if (ctb_shm.exists()) - ctb_shm.openSharedMemory(); + ctb_shm.openSharedMemory(verify); } void DetectorImpl::setAcquiringFlag(bool flag) { shm()->acquiringFlag = flag; } @@ -69,7 +69,7 @@ void DetectorImpl::freeSharedMemory(int detectorIndex, int detPos) { int numModules = 0; if (detectorShm.exists()) { - detectorShm.openSharedMemory(); + detectorShm.openSharedMemory(false); numModules = detectorShm()->numberOfModules; detectorShm.removeSharedMemory(); } @@ -144,7 +144,7 @@ void DetectorImpl::initSharedMemory(bool verify) { shm.createSharedMemory(); initializeDetectorStructure(); } else { - shm.openSharedMemory(); + shm.openSharedMemory(verify); if (verify && shm()->shmversion != DETECTOR_SHMVERSION) { LOG(logERROR) << "Detector shared memory (" << detectorIndex << ") version mismatch " @@ -264,7 +264,7 @@ void DetectorImpl::setHostname(const std::vector &name) { if (shm()->detType == defs::CHIPTESTBOARD) { if (ctb_shm.exists()) - ctb_shm.openSharedMemory(); + ctb_shm.openSharedMemory(true); else ctb_shm.createSharedMemory(); } diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 2a7429c8f..733683c78 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -3202,7 +3202,7 @@ slsDetectorDefs::detectorType Module::getDetectorTypeFromShm(int det_id, "memory. Please free shared memory."); } - shm.openSharedMemory(); + shm.openSharedMemory(verify); if (verify && shm()->shmversion != MODULE_SHMVERSION) { std::ostringstream ss; ss << "Single shared memory (" << det_id << "-" << moduleIndex @@ -3221,7 +3221,7 @@ void Module::initSharedMemory(detectorType type, int det_id, bool verify) { shm.createSharedMemory(); initializeModuleStructure(type); } else { - shm.openSharedMemory(); + shm.openSharedMemory(verify); if (verify && shm()->shmversion != MODULE_SHMVERSION) { std::ostringstream ss; ss << "Single shared memory (" << det_id << "-" << moduleIndex diff --git a/slsDetectorSoftware/src/SharedMemory.h b/slsDetectorSoftware/src/SharedMemory.h index 5693a541f..2b1135724 100644 --- a/slsDetectorSoftware/src/SharedMemory.h +++ b/slsDetectorSoftware/src/SharedMemory.h @@ -101,14 +101,15 @@ template class SharedMemory { LOG(logINFO) << "Shared memory created " << name; } - void openSharedMemory() { + void openSharedMemory(bool verifySize) { int fd = shm_open(name.c_str(), O_RDWR, 0); if (fd < 0) { std::string msg = "Open existing shared memory " + name + " failed: " + strerror(errno); throw SharedMemoryError(msg); } - checkSize(fd); + if (verifySize) + checkSize(fd); shared_struct = mapSharedMemory(fd); } diff --git a/slsDetectorSoftware/tests/test-Module.cpp b/slsDetectorSoftware/tests/test-Module.cpp index 52805939b..2fdb60998 100644 --- a/slsDetectorSoftware/tests/test-Module.cpp +++ b/slsDetectorSoftware/tests/test-Module.cpp @@ -33,7 +33,7 @@ TEST_CASE("Is shm fixed pattern shm compatible") { // Set shm version to 0 sls::SharedMemory shm(0, 0); REQUIRE(shm.exists() == true); - shm.openSharedMemory(); + shm.openSharedMemory(true); shm()->shmversion = 0; // Should fail since version is set to 0 diff --git a/slsDetectorSoftware/tests/test-SharedMemory.cpp b/slsDetectorSoftware/tests/test-SharedMemory.cpp index 051100663..67df21efb 100644 --- a/slsDetectorSoftware/tests/test-SharedMemory.cpp +++ b/slsDetectorSoftware/tests/test-SharedMemory.cpp @@ -47,7 +47,7 @@ TEST_CASE("Open existing SharedMemory and read", "[detector]") { } SharedMemory shm2(shm_id, -1); - shm2.openSharedMemory(); + shm2.openSharedMemory(true); CHECK(*shm2() == 5.3); shm2.removeSharedMemory(); @@ -74,7 +74,7 @@ TEST_CASE("Open two shared memories to the same place", "[detector]") { // Open the second shared memory with the same name SharedMemory shm2(shm_id, -1); - shm2.openSharedMemory(); + shm2.openSharedMemory(true); CHECK(shm2()->x == 5); CHECK(shm.getName() == shm2.getName()); @@ -165,7 +165,7 @@ TEST_CASE("map int64 to int32 throws"){ *shm() = 7; SharedMemory shm2(shm_id, -1); - REQUIRE_THROWS(shm2.openSharedMemory()); + REQUIRE_THROWS(shm2.openSharedMemory(true)); shm.removeSharedMemory();