From 8ec8e47924a9860694a742c598ffd27b8fb04868 Mon Sep 17 00:00:00 2001 From: Sinisa Veseli Date: Fri, 17 Nov 2023 12:58:58 -0600 Subject: [PATCH 1/3] fix static build --- src/copy/dataDistributorPlugin.cpp | 9 ++++++--- src/database/pvDatabase.cpp | 2 ++ test/src/testPlugin.cpp | 6 +++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/copy/dataDistributorPlugin.cpp b/src/copy/dataDistributorPlugin.cpp index 1e17ad2..151b235 100644 --- a/src/copy/dataDistributorPlugin.cpp +++ b/src/copy/dataDistributorPlugin.cpp @@ -83,7 +83,7 @@ static std::string toLowerCase(const std::string& input) // Data distributor class static std::string name("distributor"); -bool DataDistributorPlugin::initialized(DataDistributorPlugin::initialize()); +bool DataDistributorPlugin::initialized(false); std::map DataDistributor::dataDistributorMap; epics::pvData::Mutex DataDistributor::dataDistributorMapMutex; @@ -275,8 +275,11 @@ void DataDistributorPlugin::create() bool DataDistributorPlugin::initialize() { - DataDistributorPluginPtr pvPlugin = DataDistributorPluginPtr(new DataDistributorPlugin()); - PVPluginRegistry::registerPlugin(name,pvPlugin); + if (not initialized) { + initialized = true; + DataDistributorPluginPtr pvPlugin = DataDistributorPluginPtr(new DataDistributorPlugin()); + PVPluginRegistry::registerPlugin(name,pvPlugin); + } return true; } diff --git a/src/database/pvDatabase.cpp b/src/database/pvDatabase.cpp index ec7fcf8..d72d5ce 100644 --- a/src/database/pvDatabase.cpp +++ b/src/database/pvDatabase.cpp @@ -23,6 +23,7 @@ #include "pv/pvArrayPlugin.h" #include "pv/pvTimestampPlugin.h" #include "pv/pvDeadbandPlugin.h" +#include "pv/dataDistributorPlugin.h" using std::tr1::static_pointer_cast; using namespace epics::pvData; @@ -44,6 +45,7 @@ PVDatabasePtr PVDatabase::getMaster() PVArrayPlugin::create(); PVTimestampPlugin::create(); PVDeadbandPlugin::create(); + DataDistributorPlugin::create(); } return pvDatabaseMaster; } diff --git a/test/src/testPlugin.cpp b/test/src/testPlugin.cpp index 4f83a6e..4e1cda7 100644 --- a/test/src/testPlugin.cpp +++ b/test/src/testPlugin.cpp @@ -366,7 +366,7 @@ static void dataDistributorTest() PVCopyPtr pvCopy1(PVCopy::create(pvRecordStructure,pvRequest,"")); PVStructurePtr pvStructureCopy1(pvCopy1->createPVStructure()); BitSetPtr bitSet1(new BitSet(pvStructureCopy1->getNumberFields())); - + PVCopyPtr pvCopy2(PVCopy::create(pvRecordStructure,pvRequest,"")); PVStructurePtr pvStructureCopy2(pvCopy2->createPVStructure()); BitSetPtr bitSet2(new BitSet(pvStructureCopy2->getNumberFields())); @@ -383,7 +383,7 @@ static void dataDistributorTest() debugOutput("client 2: update 0", result, nSet, bitSet2, pvStructureCopy2); testOk1(result==true); testOk1(nSet==1); - + // Update 1: only client 1 gets it pvValue->put(1); @@ -398,7 +398,7 @@ static void dataDistributorTest() debugOutput("client 2: update 1", result, nSet, bitSet2, pvStructureCopy2); testOk1(result==false); testOk1(nSet==0); - + // Update 2: only client 2 gets it pvValue->put(2); From f43d50768e4b3db6d865ccd1b6e319bf29654485 Mon Sep 17 00:00:00 2001 From: Sinisa Veseli Date: Fri, 17 Nov 2023 14:05:30 -0600 Subject: [PATCH 2/3] fix windows warnings --- src/copy/dataDistributorPlugin.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/copy/dataDistributorPlugin.cpp b/src/copy/dataDistributorPlugin.cpp index 151b235..db41525 100644 --- a/src/copy/dataDistributorPlugin.cpp +++ b/src/copy/dataDistributorPlugin.cpp @@ -26,8 +26,8 @@ namespace epics { namespace pvCopy { // Utilities for manipulating strings static std::string leftTrim(const std::string& s) { - int i; - int n = s.length(); + unsigned int i; + unsigned int n = s.length(); for (i = 0; i < n; i++) { if (!isspace(s[i])) { break; @@ -38,8 +38,8 @@ static std::string leftTrim(const std::string& s) static std::string rightTrim(const std::string& s) { - int i; - int n = s.length(); + unsigned int i; + unsigned int n = s.length(); for (i = n; i > 0; i--) { if (!isspace(s[i-1])) { break; @@ -110,7 +110,7 @@ void DataDistributor::removeUnusedInstance(DataDistributorPtr dataDistributorPtr std::map::iterator ddit = dataDistributorMap.find(groupId); if (ddit != dataDistributorMap.end()) { DataDistributorPtr ddPtr = ddit->second; - int nSets = ddPtr->clientSetMap.size(); + unsigned int nSets = ddPtr->clientSetMap.size(); if (nSets == 0) { dataDistributorMap.erase(ddit); } @@ -275,7 +275,7 @@ void DataDistributorPlugin::create() bool DataDistributorPlugin::initialize() { - if (not initialized) { + if (!initialized) { initialized = true; DataDistributorPluginPtr pvPlugin = DataDistributorPluginPtr(new DataDistributorPlugin()); PVPluginRegistry::registerPlugin(name,pvPlugin); From 203ee1b450ae2bc309d526470ccce5d5c06ab8b7 Mon Sep 17 00:00:00 2001 From: Sinisa Veseli Date: Fri, 17 Nov 2023 14:23:10 -0600 Subject: [PATCH 3/3] fix windows warnings --- src/copy/dataDistributorPlugin.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/copy/dataDistributorPlugin.cpp b/src/copy/dataDistributorPlugin.cpp index db41525..f6c3571 100644 --- a/src/copy/dataDistributorPlugin.cpp +++ b/src/copy/dataDistributorPlugin.cpp @@ -27,7 +27,7 @@ namespace epics { namespace pvCopy { static std::string leftTrim(const std::string& s) { unsigned int i; - unsigned int n = s.length(); + unsigned int n = (unsigned int)s.length(); for (i = 0; i < n; i++) { if (!isspace(s[i])) { break; @@ -39,7 +39,7 @@ static std::string leftTrim(const std::string& s) static std::string rightTrim(const std::string& s) { unsigned int i; - unsigned int n = s.length(); + unsigned int n = (unsigned int)s.length(); for (i = n; i > 0; i--) { if (!isspace(s[i-1])) { break; @@ -110,7 +110,7 @@ void DataDistributor::removeUnusedInstance(DataDistributorPtr dataDistributorPtr std::map::iterator ddit = dataDistributorMap.find(groupId); if (ddit != dataDistributorMap.end()) { DataDistributorPtr ddPtr = ddit->second; - unsigned int nSets = ddPtr->clientSetMap.size(); + size_t nSets = ddPtr->clientSetMap.size(); if (nSets == 0) { dataDistributorMap.erase(ddit); } @@ -409,7 +409,7 @@ bool DataDistributorFilter::filter(const PVFieldPtr& pvCopy, const BitSetPtr& bi if(proceedWithUpdate) { pvCopy->copyUnchecked(*masterFieldPtr); - bitSet->set(pvCopy->getFieldOffset()); + bitSet->set((unsigned int)pvCopy->getFieldOffset()); } else { // Clear all bits