From 87ccf78a9b2ea13dd90f349d1d9e1e3cfe699708 Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Sat, 19 May 2018 10:11:48 -0400 Subject: [PATCH] address issue #33 --- src/pv/channelProviderLocal.h | 51 +++------------------------ src/pvAccess/channelLocal.cpp | 3 +- src/pvAccess/channelProviderLocal.cpp | 9 +---- src/pvAccess/monitorFactory.cpp | 30 ++-------------- 4 files changed, 9 insertions(+), 84 deletions(-) diff --git a/src/pv/channelProviderLocal.h b/src/pv/channelProviderLocal.h index aff902a..a86fc40 100644 --- a/src/pv/channelProviderLocal.h +++ b/src/pv/channelProviderLocal.h @@ -39,60 +39,18 @@ #include - namespace epics { namespace pvDatabase { - -class MonitorFactory; -typedef std::tr1::shared_ptr MonitorFactoryPtr; - -class MonitorLocal; -typedef std::tr1::shared_ptr MonitorLocalPtr; - - class ChannelProviderLocal; typedef std::tr1::shared_ptr ChannelProviderLocalPtr; class ChannelLocal; typedef std::tr1::shared_ptr ChannelLocalPtr; -epicsShareFunc MonitorFactoryPtr getMonitorFactory(); - -/** - * @brief MonitorFactory - * - * This class provides a static method to create a monitor for a PVRecord - */ -class epicsShareClass MonitorFactory -{ -public: - POINTER_DEFINITIONS(MonitorFactory); - /** - * @brief Destructor - */ - virtual ~MonitorFactory(); - /** - * @brief Create a monitor on a record. - * - * This is called by the local channel provider. - * @param pvRecord The record to monitor. - * @param monitorRequester The client callback. - * @param pvRequest Options specified by the client. - * This includes the subset of the fields in the record to monitor. - * @return A shared pointer to the newly created monitor. - * If the monitor can not be created a null monitor is returned. - * This means the pvRequest specified options that could not be satisfied. - */ - epics::pvData::MonitorPtr createMonitor( - PVRecordPtr const & pvRecord, - epics::pvData::MonitorRequester::shared_pointer const & monitorRequester, - epics::pvData::PVStructurePtr const & pvRequest); -private: - MonitorFactory(); - friend class MonitorLocal; - friend epicsShareFunc MonitorFactoryPtr getMonitorFactory(); - epics::pvData::Mutex mutex; -}; +epicsShareFunc epics::pvData::MonitorPtr createMonitorLocal( + PVRecordPtr const & pvRecord, + epics::pvData::MonitorRequester::shared_pointer const & monitorRequester, + epics::pvData::PVStructurePtr const & pvRequest); epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal(); @@ -208,7 +166,6 @@ public: private: friend epicsShareFunc ChannelProviderLocalPtr getChannelProviderLocal(); PVDatabasePtr pvDatabase; - epics::pvData::Mutex mutex; int traceLevel; friend class ChannelProviderLocalRun; }; diff --git a/src/pvAccess/channelLocal.cpp b/src/pvAccess/channelLocal.cpp index 4315966..03988f9 100644 --- a/src/pvAccess/channelLocal.cpp +++ b/src/pvAccess/channelLocal.cpp @@ -1371,8 +1371,7 @@ Monitor::shared_pointer ChannelLocal::createMonitor( << endl; } - MonitorPtr monitor = - getMonitorFactory()->createMonitor( + MonitorPtr monitor = createMonitorLocal( pvRecord, monitorRequester, pvRequest); diff --git a/src/pvAccess/channelProviderLocal.cpp b/src/pvAccess/channelProviderLocal.cpp index c4a84c9..d9e1acd 100644 --- a/src/pvAccess/channelProviderLocal.cpp +++ b/src/pvAccess/channelProviderLocal.cpp @@ -103,7 +103,6 @@ ChannelFind::shared_pointer ChannelProviderLocal::channelFind( if(traceLevel>1) { cout << "ChannelProviderLocal::channelFind " << "channelName" << endl; } - Lock xx(mutex); PVRecordPtr pvRecord = pvDatabase->findRecord(channelName); if(pvRecord) { channelFindRequester->channelFindResult( @@ -127,12 +126,7 @@ ChannelFind::shared_pointer ChannelProviderLocal::channelList( if(traceLevel>1) { cout << "ChannelProviderLocal::channelList\n"; } - PVStringArrayPtr records; - { - Lock guard(mutex); - records = pvDatabase->getRecordNames(); - } - + PVStringArrayPtr records(pvDatabase->getRecordNames()); channelListRequester->channelListResult(Status::Ok, shared_from_this(), records->view(), false); return shared_from_this(); } @@ -145,7 +139,6 @@ Channel::shared_pointer ChannelProviderLocal::createChannel( if(traceLevel>1) { cout << "ChannelProviderLocal::createChannel " << "channelName" << endl; } - Lock xx(mutex); PVRecordPtr pvRecord = pvDatabase->findRecord(channelName); if(pvRecord) { ChannelLocalPtr channel(new ChannelLocal( diff --git a/src/pvAccess/monitorFactory.cpp b/src/pvAccess/monitorFactory.cpp index 7ac6290..b532d58 100644 --- a/src/pvAccess/monitorFactory.cpp +++ b/src/pvAccess/monitorFactory.cpp @@ -29,6 +29,8 @@ using std::string; namespace epics { namespace pvDatabase { +class MonitorLocal; +typedef std::tr1::shared_ptr MonitorLocalPtr; static MonitorPtr nullMonitor; static MonitorElementPtr NULLMonitorElement; @@ -445,22 +447,11 @@ bool MonitorLocal::init(PVStructurePtr const & pvRequest) return true; } - -MonitorFactory::MonitorFactory() -{ -} - -MonitorFactory::~MonitorFactory() -{ - -} - -MonitorPtr MonitorFactory::createMonitor( +MonitorPtr createMonitorLocal( PVRecordPtr const & pvRecord, MonitorRequester::shared_pointer const & monitorRequester, PVStructurePtr const & pvRequest) { - Lock xx(mutex); MonitorLocalPtr monitor(new MonitorLocal( monitorRequester,pvRecord)); bool result = monitor->init(pvRequest); @@ -478,19 +469,4 @@ MonitorPtr MonitorFactory::createMonitor( return monitor; } - - -MonitorFactoryPtr getMonitorFactory() -{ - static MonitorFactoryPtr monitorFactoryPtr; - static Mutex mutex; - Lock xx(mutex); - - if(!monitorFactoryPtr) { - monitorFactoryPtr = MonitorFactoryPtr( - new MonitorFactory()); - } - return monitorFactoryPtr; -} - }}