mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-02-13 17:58:43 +01:00
Dev/shm fix remove (#1279)
* one doesnt need to open shared memory to call removesharedmemory, and calling hasMemoryvalid without opening will cause segfault (not used now, but could in the future) * fix test on shm
This commit is contained in:
29
RELEASE.txt
29
RELEASE.txt
@@ -30,16 +30,15 @@ This document describes the differences between vx.x.x and vx.0.2
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2 On-board Detector Server Compatibility
|
2 On-board Detector Server Compatibility
|
||||||
==========================================
|
==========================================
|
||||||
|
|
||||||
|
|
||||||
Eiger 9.0.0
|
Eiger 10.0.0
|
||||||
Jungfrau 9.0.0
|
Jungfrau 10.0.0
|
||||||
Mythen3 9.0.0
|
Mythen3 10.0.0
|
||||||
Gotthard2 9.0.0
|
Gotthard2 10.0.0
|
||||||
Moench 9.0.0
|
Moench 10.0.0
|
||||||
|
|
||||||
|
|
||||||
On-board Detector Server Upgrade
|
On-board Detector Server Upgrade
|
||||||
@@ -62,17 +61,16 @@ This document describes the differences between vx.x.x and vx.0.2
|
|||||||
3 Firmware Requirements
|
3 Firmware Requirements
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
|
||||||
Eiger 02.10.2023 (v32) (updated in 7.0.3)
|
Eiger 02.10.2023 (v32) (updated in 7.0.3)
|
||||||
|
|
||||||
Jungfrau 20.09.2023 (v1.5, HW v1.0) (updated in 8.0.0)
|
Jungfrau 09.02.2025 (v1.6, HW v1.0) (updated in 9.1.0)
|
||||||
21.09.2023 (v2.5, HW v2.0) (updated in 8.0.0)
|
08.02.2025 (v2.6, HW v2.0) (updated in 9.1.0)
|
||||||
|
|
||||||
Mythen3 11.10.2024 (v1.5) (updated in 9.0.0)
|
Mythen3 13.11.2024 (v2.0) (updated in 9.0.0)
|
||||||
|
|
||||||
Gotthard2 03.10.2024 (v1.0) (updated in 9.0.0)
|
Gotthard2 03.10.2024 (v1.0) (updated in 9.0.0)
|
||||||
|
|
||||||
Moench 26.10.2023 (v2.0) (updated in 9.0.0)
|
Moench 26.10.2023 (v2.0) (updated in 8.0.2)
|
||||||
|
|
||||||
|
|
||||||
Detector Upgrade
|
Detector Upgrade
|
||||||
@@ -187,6 +185,14 @@ This document describes the differences between vx.x.x and vx.0.2
|
|||||||
https://slsdetectorgroup.github.io/devdoc/udpheader.html
|
https://slsdetectorgroup.github.io/devdoc/udpheader.html
|
||||||
https://slsdetectorgroup.github.io/devdoc/udpdetspec.html
|
https://slsdetectorgroup.github.io/devdoc/udpdetspec.html
|
||||||
|
|
||||||
|
Output Data:
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/dataformat.html
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/fileformat.html
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/slsreceiverheaderformat.html
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/masterfileattributes.html
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/binaryfileformat.html
|
||||||
|
https://slsdetectorgroup.github.io/devdoc/hdf5fileformat.html
|
||||||
|
|
||||||
slsReceiver Zmq Format:
|
slsReceiver Zmq Format:
|
||||||
https://slsdetectorgroup.github.io/devdoc/slsreceiver.html#zmq-json-header-format
|
https://slsdetectorgroup.github.io/devdoc/slsreceiver.html#zmq-json-header-format
|
||||||
|
|
||||||
@@ -206,3 +212,4 @@ This document describes the differences between vx.x.x and vx.0.2
|
|||||||
|
|
||||||
dhanya.thattil@psi.ch
|
dhanya.thattil@psi.ch
|
||||||
erik.frojdh@psi.ch
|
erik.frojdh@psi.ch
|
||||||
|
alice.mazzoleni@psi.ch
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ void freeSharedMemory(const int detectorIndex, const int moduleIndex) {
|
|||||||
if (moduleIndex >= 0) {
|
if (moduleIndex >= 0) {
|
||||||
SharedMemory<sharedModule> moduleShm(detectorIndex, moduleIndex);
|
SharedMemory<sharedModule> moduleShm(detectorIndex, moduleIndex);
|
||||||
if (moduleShm.exists()) {
|
if (moduleShm.exists()) {
|
||||||
moduleShm.openSharedMemory(false);
|
|
||||||
moduleShm.removeSharedMemory();
|
moduleShm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -48,7 +47,6 @@ void freeSharedMemory(const int detectorIndex, const int moduleIndex) {
|
|||||||
for (int i = 0; i < numDetectors; ++i) {
|
for (int i = 0; i < numDetectors; ++i) {
|
||||||
SharedMemory<sharedModule> moduleShm(detectorIndex, i);
|
SharedMemory<sharedModule> moduleShm(detectorIndex, i);
|
||||||
if (moduleShm.exists()) {
|
if (moduleShm.exists()) {
|
||||||
moduleShm.openSharedMemory(false);
|
|
||||||
moduleShm.removeSharedMemory();
|
moduleShm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,7 +54,6 @@ void freeSharedMemory(const int detectorIndex, const int moduleIndex) {
|
|||||||
// Ctb configuration
|
// Ctb configuration
|
||||||
SharedMemory<CtbConfig> ctbShm(detectorIndex, -1, CtbConfig::shm_tag());
|
SharedMemory<CtbConfig> ctbShm(detectorIndex, -1, CtbConfig::shm_tag());
|
||||||
if (ctbShm.exists()) {
|
if (ctbShm.exists()) {
|
||||||
ctbShm.openSharedMemory(false);
|
|
||||||
ctbShm.removeSharedMemory();
|
ctbShm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3396,11 +3396,11 @@ void Module::createSharedMemory(detectorType type, int det_id) {
|
|||||||
|
|
||||||
// ensure shared memory was not created before
|
// ensure shared memory was not created before
|
||||||
if (shm.exists()) {
|
if (shm.exists()) {
|
||||||
throw SharedMemoryError(
|
LOG(logWARNING)
|
||||||
"This shared memory " + shm.getName() +
|
<< "This shared memory " + shm.getName() +
|
||||||
" should have been deleted before! Free it to continue.");
|
" should have been deleted before! Freeing it to continue.";
|
||||||
|
shm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
shm.createSharedMemory();
|
shm.createSharedMemory();
|
||||||
initializeModuleStructure(type);
|
initializeModuleStructure(type);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ template <typename T> class SharedMemory {
|
|||||||
name = constructSharedMemoryName(detectorId, moduleIndex, tag);
|
name = constructSharedMemoryName(detectorId, moduleIndex, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
explicit SharedMemory(const std::string &shm_name) : name(shm_name) {}
|
||||||
|
|
||||||
// Disable copy, since we refer to a unique location
|
// Disable copy, since we refer to a unique location
|
||||||
SharedMemory(const SharedMemory &) = delete;
|
SharedMemory(const SharedMemory &) = delete;
|
||||||
SharedMemory &operator=(const SharedMemory &other) = delete;
|
SharedMemory &operator=(const SharedMemory &other) = delete;
|
||||||
@@ -81,8 +83,12 @@ template <typename T> class SharedMemory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool memoryHasValidFlag() const {
|
bool memoryHasValidFlag() const {
|
||||||
|
if (shared_struct == nullptr) {
|
||||||
|
throw SharedMemoryError(
|
||||||
|
"Shared memory not mapped. Cannot check validity.");
|
||||||
|
}
|
||||||
|
// CtbConfig did not have shmversion before, so exact value check
|
||||||
if constexpr (is_type<CtbConfig, T>()) {
|
if constexpr (is_type<CtbConfig, T>()) {
|
||||||
// CtbConfig did not have shmversion before, so exact value check
|
|
||||||
if (shared_struct->shmversion == SHM_IS_VALID_CHECK_VERSION) {
|
if (shared_struct->shmversion == SHM_IS_VALID_CHECK_VERSION) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -99,11 +105,18 @@ template <typename T> class SharedMemory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void invalidate() {
|
void invalidate() {
|
||||||
|
bool wasValid = true;
|
||||||
|
if (shared_struct == nullptr) {
|
||||||
|
wasValid = false;
|
||||||
|
openSharedMemory(false);
|
||||||
|
}
|
||||||
// also called by obsolete shm test structure (so check added)
|
// also called by obsolete shm test structure (so check added)
|
||||||
if constexpr (has_bool_isValid<T>::value) {
|
if constexpr (has_bool_isValid<T>::value) {
|
||||||
if (memoryHasValidFlag())
|
if (memoryHasValidFlag())
|
||||||
shared_struct->isValid = false;
|
shared_struct->isValid = false;
|
||||||
}
|
}
|
||||||
|
if (!wasValid)
|
||||||
|
unmapSharedMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
T *operator()() {
|
T *operator()() {
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ struct ObsoleteCtbData {
|
|||||||
void freeShm(const int dindex, const int mIndex) {
|
void freeShm(const int dindex, const int mIndex) {
|
||||||
SharedMemory<Data> shm(dindex, mIndex);
|
SharedMemory<Data> shm(dindex, mIndex);
|
||||||
if (shm.exists()) {
|
if (shm.exists()) {
|
||||||
shm.openSharedMemory(false);
|
|
||||||
shm.removeSharedMemory();
|
shm.removeSharedMemory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user