mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-25 07:40:03 +02:00
size of shm needs to be only sometimes checked when opening shared memory (#443)
This commit is contained in:
parent
88649a00b6
commit
8d6b8d66cc
@ -37,7 +37,7 @@ void freeSharedMemory(int detectorIndex, int moduleIndex) {
|
|||||||
int numDetectors = 0;
|
int numDetectors = 0;
|
||||||
|
|
||||||
if (detectorShm.exists()) {
|
if (detectorShm.exists()) {
|
||||||
detectorShm.openSharedMemory();
|
detectorShm.openSharedMemory(false);
|
||||||
numDetectors = detectorShm()->numberOfModules;
|
numDetectors = detectorShm()->numberOfModules;
|
||||||
detectorShm.removeSharedMemory();
|
detectorShm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ void DetectorImpl::setupDetector(bool verify, bool update) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ctb_shm.exists())
|
if (ctb_shm.exists())
|
||||||
ctb_shm.openSharedMemory();
|
ctb_shm.openSharedMemory(verify);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DetectorImpl::setAcquiringFlag(bool flag) { shm()->acquiringFlag = flag; }
|
void DetectorImpl::setAcquiringFlag(bool flag) { shm()->acquiringFlag = flag; }
|
||||||
@ -69,7 +69,7 @@ void DetectorImpl::freeSharedMemory(int detectorIndex, int detPos) {
|
|||||||
int numModules = 0;
|
int numModules = 0;
|
||||||
|
|
||||||
if (detectorShm.exists()) {
|
if (detectorShm.exists()) {
|
||||||
detectorShm.openSharedMemory();
|
detectorShm.openSharedMemory(false);
|
||||||
numModules = detectorShm()->numberOfModules;
|
numModules = detectorShm()->numberOfModules;
|
||||||
detectorShm.removeSharedMemory();
|
detectorShm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
@ -144,7 +144,7 @@ void DetectorImpl::initSharedMemory(bool verify) {
|
|||||||
shm.createSharedMemory();
|
shm.createSharedMemory();
|
||||||
initializeDetectorStructure();
|
initializeDetectorStructure();
|
||||||
} else {
|
} else {
|
||||||
shm.openSharedMemory();
|
shm.openSharedMemory(verify);
|
||||||
if (verify && shm()->shmversion != DETECTOR_SHMVERSION) {
|
if (verify && shm()->shmversion != DETECTOR_SHMVERSION) {
|
||||||
LOG(logERROR) << "Detector shared memory (" << detectorIndex
|
LOG(logERROR) << "Detector shared memory (" << detectorIndex
|
||||||
<< ") version mismatch "
|
<< ") version mismatch "
|
||||||
@ -264,7 +264,7 @@ void DetectorImpl::setHostname(const std::vector<std::string> &name) {
|
|||||||
|
|
||||||
if (shm()->detType == defs::CHIPTESTBOARD) {
|
if (shm()->detType == defs::CHIPTESTBOARD) {
|
||||||
if (ctb_shm.exists())
|
if (ctb_shm.exists())
|
||||||
ctb_shm.openSharedMemory();
|
ctb_shm.openSharedMemory(true);
|
||||||
else
|
else
|
||||||
ctb_shm.createSharedMemory();
|
ctb_shm.createSharedMemory();
|
||||||
}
|
}
|
||||||
|
@ -3202,7 +3202,7 @@ slsDetectorDefs::detectorType Module::getDetectorTypeFromShm(int det_id,
|
|||||||
"memory. Please free shared memory.");
|
"memory. Please free shared memory.");
|
||||||
}
|
}
|
||||||
|
|
||||||
shm.openSharedMemory();
|
shm.openSharedMemory(verify);
|
||||||
if (verify && shm()->shmversion != MODULE_SHMVERSION) {
|
if (verify && shm()->shmversion != MODULE_SHMVERSION) {
|
||||||
std::ostringstream ss;
|
std::ostringstream ss;
|
||||||
ss << "Single shared memory (" << det_id << "-" << moduleIndex
|
ss << "Single shared memory (" << det_id << "-" << moduleIndex
|
||||||
@ -3221,7 +3221,7 @@ void Module::initSharedMemory(detectorType type, int det_id, bool verify) {
|
|||||||
shm.createSharedMemory();
|
shm.createSharedMemory();
|
||||||
initializeModuleStructure(type);
|
initializeModuleStructure(type);
|
||||||
} else {
|
} else {
|
||||||
shm.openSharedMemory();
|
shm.openSharedMemory(verify);
|
||||||
if (verify && shm()->shmversion != MODULE_SHMVERSION) {
|
if (verify && shm()->shmversion != MODULE_SHMVERSION) {
|
||||||
std::ostringstream ss;
|
std::ostringstream ss;
|
||||||
ss << "Single shared memory (" << det_id << "-" << moduleIndex
|
ss << "Single shared memory (" << det_id << "-" << moduleIndex
|
||||||
|
@ -101,14 +101,15 @@ template <typename T> class SharedMemory {
|
|||||||
LOG(logINFO) << "Shared memory created " << name;
|
LOG(logINFO) << "Shared memory created " << name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void openSharedMemory() {
|
void openSharedMemory(bool verifySize) {
|
||||||
int fd = shm_open(name.c_str(), O_RDWR, 0);
|
int fd = shm_open(name.c_str(), O_RDWR, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
std::string msg = "Open existing shared memory " + name +
|
std::string msg = "Open existing shared memory " + name +
|
||||||
" failed: " + strerror(errno);
|
" failed: " + strerror(errno);
|
||||||
throw SharedMemoryError(msg);
|
throw SharedMemoryError(msg);
|
||||||
}
|
}
|
||||||
checkSize(fd);
|
if (verifySize)
|
||||||
|
checkSize(fd);
|
||||||
shared_struct = mapSharedMemory(fd);
|
shared_struct = mapSharedMemory(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ TEST_CASE("Is shm fixed pattern shm compatible") {
|
|||||||
// Set shm version to 0
|
// Set shm version to 0
|
||||||
sls::SharedMemory<sls::sharedModule> shm(0, 0);
|
sls::SharedMemory<sls::sharedModule> shm(0, 0);
|
||||||
REQUIRE(shm.exists() == true);
|
REQUIRE(shm.exists() == true);
|
||||||
shm.openSharedMemory();
|
shm.openSharedMemory(true);
|
||||||
shm()->shmversion = 0;
|
shm()->shmversion = 0;
|
||||||
|
|
||||||
// Should fail since version is set to 0
|
// Should fail since version is set to 0
|
||||||
|
@ -47,7 +47,7 @@ TEST_CASE("Open existing SharedMemory and read", "[detector]") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SharedMemory<double> shm2(shm_id, -1);
|
SharedMemory<double> shm2(shm_id, -1);
|
||||||
shm2.openSharedMemory();
|
shm2.openSharedMemory(true);
|
||||||
CHECK(*shm2() == 5.3);
|
CHECK(*shm2() == 5.3);
|
||||||
|
|
||||||
shm2.removeSharedMemory();
|
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
|
// Open the second shared memory with the same name
|
||||||
SharedMemory<Data> shm2(shm_id, -1);
|
SharedMemory<Data> shm2(shm_id, -1);
|
||||||
shm2.openSharedMemory();
|
shm2.openSharedMemory(true);
|
||||||
CHECK(shm2()->x == 5);
|
CHECK(shm2()->x == 5);
|
||||||
CHECK(shm.getName() == shm2.getName());
|
CHECK(shm.getName() == shm2.getName());
|
||||||
|
|
||||||
@ -165,7 +165,7 @@ TEST_CASE("map int64 to int32 throws"){
|
|||||||
*shm() = 7;
|
*shm() = 7;
|
||||||
|
|
||||||
SharedMemory<int64_t> shm2(shm_id, -1);
|
SharedMemory<int64_t> shm2(shm_id, -1);
|
||||||
REQUIRE_THROWS(shm2.openSharedMemory());
|
REQUIRE_THROWS(shm2.openSharedMemory(true));
|
||||||
|
|
||||||
shm.removeSharedMemory();
|
shm.removeSharedMemory();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user