initial changes

This commit is contained in:
Erik Frojdh
2019-03-12 08:22:07 +01:00
parent 6765fd0dc8
commit a01d68a61f
6 changed files with 100 additions and 70 deletions

View File

@ -33,7 +33,7 @@ multiSlsDetector::multiSlsDetector(int id, bool verify, bool update)
multiSlsDetector::~multiSlsDetector() {
if (sharedMemory) {
sharedMemory->UnmapSharedMemory(thisMultiDetector);
sharedMemory->UnmapSharedMemory();
delete sharedMemory;
}
}
@ -252,20 +252,21 @@ void multiSlsDetector::freeSharedMemory(int multiId, int detPos) {
// multi
// get number of detectors
int numDetectors = 0;
auto shm = SharedMemory(multiId, -1);
auto shm = SharedMemory<sharedMultiSlsDetector>(multiId, -1);
// get number of detectors from multi shm
if (shm.IsExisting()) {
sharedMultiSlsDetector *mdet =
(sharedMultiSlsDetector *)shm.OpenSharedMemory(
sizeof(sharedMultiSlsDetector));
numDetectors = mdet->numberOfDetectors;
shm.UnmapSharedMemory(mdet);
// sharedMultiSlsDetector *mdet =
// (sharedMultiSlsDetector *)shm.OpenSharedMemory(
// sizeof(sharedMultiSlsDetector));
shm.OpenSharedMemory(sizeof(sharedMultiSlsDetector));
numDetectors = shm()->numberOfDetectors;
shm.UnmapSharedMemory();
shm.RemoveSharedMemory();
}
for (int i = 0; i < numDetectors; ++i) {
auto shm = SharedMemory(multiId, i);
auto shm = SharedMemory<sharedMultiSlsDetector>(multiId, i);
shm.RemoveSharedMemory();
}
}
@ -288,7 +289,7 @@ void multiSlsDetector::freeSharedMemory(int detPos) {
// clear multi detector shm
if (sharedMemory) {
if (thisMultiDetector) {
sharedMemory->UnmapSharedMemory(thisMultiDetector);
sharedMemory->UnmapSharedMemory();
thisMultiDetector = nullptr;
}
sharedMemory->RemoveSharedMemory();
@ -326,19 +327,23 @@ std::string multiSlsDetector::getUserDetails() {
void multiSlsDetector::initSharedMemory(bool verify) {
try {
// shared memory object with name
sharedMemory = new SharedMemory(detId, -1);
sharedMemory = new SharedMemory<sharedMultiSlsDetector>(detId, -1);
size_t sz = sizeof(sharedMultiSlsDetector);
// create
if (!sharedMemory->IsExisting()) {
thisMultiDetector =
(sharedMultiSlsDetector *)sharedMemory->CreateSharedMemory(sz);
// thisMultiDetector =
// (sharedMultiSlsDetector *)sharedMemory->CreateSharedMemory(sz);
sharedMemory->CreateSharedMemory(sz);
thisMultiDetector= (*sharedMemory)(); //TODO remove line
initializeDetectorStructure();
}
// open and verify version
else {
thisMultiDetector =
(sharedMultiSlsDetector *)sharedMemory->OpenSharedMemory(sz);
// thisMultiDetector =
// (sharedMultiSlsDetector *)sharedMemory->OpenSharedMemory(sz);
sharedMemory->OpenSharedMemory(sz);
thisMultiDetector = (*sharedMemory)();
if (verify && thisMultiDetector->shmversion != MULTI_SHMVERSION) {
FILE_LOG(logERROR) << "Multi shared memory (" << detId << ") version mismatch "
"(expected 0x"
@ -350,7 +355,7 @@ void multiSlsDetector::initSharedMemory(bool verify) {
if (sharedMemory) {
// unmap
if (thisMultiDetector) {
sharedMemory->UnmapSharedMemory(thisMultiDetector);
sharedMemory->UnmapSharedMemory();
thisMultiDetector = nullptr;
}
// delete

View File

@ -10,9 +10,9 @@
#include "error_defs.h"
#include "logger.h"
#include "sls_detector_defs.h"
#include "SharedMemory.h"
class slsDetector;
class SharedMemory;
// class SharedMemory;
class ZmqSocket;
class detectorData;
@ -27,10 +27,7 @@ class detectorData;
#define SHORT_STRING_LENGTH 50
#define DATE_LENGTH 30
class multiSlsDetector : public virtual slsDetectorDefs,
public virtual errorDefs {
private:
/**
* @short structure allocated in shared memory to store detector settings
* for IPC and cache
@ -99,7 +96,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
int maxNumberOfChannelsPerDetector[2];
/** timer values */
int64_t timerValue[MAX_TIMERS];
int64_t timerValue[slsDetectorDefs::timerIndex::MAX_TIMERS];
/** flag for acquiring */
bool acquiringFlag;
@ -113,6 +110,12 @@ class multiSlsDetector : public virtual slsDetectorDefs,
} sharedMultiSlsDetector;
class multiSlsDetector : public virtual slsDetectorDefs,
public virtual errorDefs {
// private:
public:
/**
* Constructor
@ -1963,7 +1966,7 @@ class multiSlsDetector : public virtual slsDetectorDefs,
int detId;
/** Shared Memory object */
SharedMemory *sharedMemory {nullptr};
SharedMemory<sharedMultiSlsDetector> *sharedMemory {nullptr};
/** Shared memory structure */
sharedMultiSlsDetector *thisMultiDetector {nullptr};