slsDetectorSoftware: Sharedmemory removed private methodf or removeshm, removed static isexisting as the usecases are all member method

This commit is contained in:
maliakal_d 2018-07-06 15:18:34 +02:00
parent 7c29327b47
commit ecd0c810ca
4 changed files with 22 additions and 30 deletions

View File

@ -621,8 +621,8 @@ void multiSlsDetector::freeSharedMemory(int multiId) {
int numDetectors = 0; int numDetectors = 0;
SharedMemory* shm = new SharedMemory(multiId, -1); SharedMemory* shm = new SharedMemory(multiId, -1);
// shm not created before // get number of detectors from multi shm
if (SharedMemory::IsExisting(shm->GetName())) { if (shm->IsExisting()) {
sharedMultiSlsDetector* mdet = (sharedMultiSlsDetector*)shm->OpenSharedMemory( sharedMultiSlsDetector* mdet = (sharedMultiSlsDetector*)shm->OpenSharedMemory(
sizeof(sharedMultiSlsDetector)); sizeof(sharedMultiSlsDetector));
numDetectors = mdet->numberOfDetectors; numDetectors = mdet->numberOfDetectors;
@ -715,7 +715,7 @@ bool multiSlsDetector::initSharedMemory(bool verify) {
bool created = false; bool created = false;
sharedMemory = new SharedMemory(detId, -1); sharedMemory = new SharedMemory(detId, -1);
if (SharedMemory::IsExisting(sharedMemory->GetName())) { if (sharedMemory->IsExisting()) {
thisMultiDetector = (sharedMultiSlsDetector*)sharedMemory->OpenSharedMemory(sz); thisMultiDetector = (sharedMultiSlsDetector*)sharedMemory->OpenSharedMemory(sz);
if (verify && thisMultiDetector->shmversion != MULTI_SHMVERSION) { if (verify && thisMultiDetector->shmversion != MULTI_SHMVERSION) {
cprintf(RED, "Multi shared memory (%d) version mismatch " cprintf(RED, "Multi shared memory (%d) version mismatch "

View File

@ -28,13 +28,13 @@ SharedMemory::~SharedMemory(){
} }
bool SharedMemory::IsExisting(std::string name) { bool SharedMemory::IsExisting() {
bool ret = true; bool ret = true;
int fd = shm_open(name.c_str(), O_RDWR, 0); int tempfd = shm_open(name.c_str(), O_RDWR, 0);
if ((fd < 0) && (errno == ENOENT)) { if ((tempfd < 0) && (errno == ENOENT)) {
ret = false; ret = false;
} }
close(fd); close(tempfd);
return ret; return ret;
} }
@ -61,7 +61,9 @@ void* SharedMemory::CreateSharedMemory(size_t sz){
} }
// map // 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){ void* SharedMemory::OpenSharedMemory(size_t sz){
@ -87,7 +89,15 @@ void SharedMemory::UnmapSharedMemory(void* addr) {
} }
void SharedMemory::RemoveSharedMemory() { 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; 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());
}

View File

@ -31,7 +31,7 @@ public:
* @param name of shared memory * @param name of shared memory
* @return true if exists, else false * @return true if exists, else false
*/ */
static bool IsExisting(std::string name); bool IsExisting();
/** /**
* Get shared memory name * Get shared memory name
@ -93,12 +93,6 @@ private:
*/ */
int VerifySizeMatch(size_t expectedSize); 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 */ /** Shared memory name */
std::string name; std::string name;

View File

@ -46,7 +46,7 @@ slsDetector::slsDetector(detectorType type, int multiId, int id, bool verify, mu
// ensure shared memory was not created before // ensure shared memory was not created before
SharedMemory* shm = new SharedMemory(multiId, id); 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 " cprintf(YELLOW BOLD,"Warning: Weird, this shared memory should have been "
"deleted before! %s. Freeing it again.\n", shm->GetName().c_str()); "deleted before! %s. Freeing it again.\n", shm->GetName().c_str());
freeSharedMemory(multiId, id); freeSharedMemory(multiId, id);
@ -1250,7 +1250,7 @@ int slsDetector::receiveModule(sls_detector_module* myMod) {
slsReceiverDefs::detectorType slsDetector::getDetectorTypeFromShm(int multiId, bool verify) { slsReceiverDefs::detectorType slsDetector::getDetectorTypeFromShm(int multiId, bool verify) {
SharedMemory* shm = new SharedMemory(multiId, detId); SharedMemory* shm = new SharedMemory(multiId, detId);
// shm not created before // shm not created before
if (!SharedMemory::IsExisting(shm->GetName())) { if (!shm->IsExisting()) {
cprintf(RED,"Shared memory %s does not exist.\n" cprintf(RED,"Shared memory %s does not exist.\n"
"Corrupted Multi Shared memory. Please free shared memory.\n", "Corrupted Multi Shared memory. Please free shared memory.\n",
shm->GetName().c_str()); shm->GetName().c_str());