From ea0e2cd5701352ca78130366f25cfa2afd9fd343 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Tue, 4 Jun 2013 07:22:51 -0400 Subject: [PATCH] interim commit --- src/pvAccess/channelLocal.cpp | 5 +++++ src/pvAccess/channelProviderLocal.cpp | 1 + src/pvAccess/channelProviderLocal.h | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/pvAccess/channelLocal.cpp b/src/pvAccess/channelLocal.cpp index 7faa725..cdcbc02 100644 --- a/src/pvAccess/channelLocal.cpp +++ b/src/pvAccess/channelLocal.cpp @@ -807,6 +807,7 @@ void ChannelLocal::destroy() if(beingDestroyed) return; beingDestroyed = true; } + pvRecord->removePVRecordClient(getPtrSelf()); while(true) { std::multiset::iterator it; it = channelProcessList.begin(); @@ -852,6 +853,10 @@ void ChannelLocal::destroy() provider->removeChannel(getPtrSelf()); } +void ChannelLocal::detach(PVRecordPtr const & pvRecord) +{ + destroy(); +} void ChannelLocal::addChannelProcess(ChannelProcess::shared_pointer const & channelProcess) { diff --git a/src/pvAccess/channelProviderLocal.cpp b/src/pvAccess/channelProviderLocal.cpp index 2ac2f74..9778c47 100644 --- a/src/pvAccess/channelProviderLocal.cpp +++ b/src/pvAccess/channelProviderLocal.cpp @@ -221,6 +221,7 @@ Channel::shared_pointer ChannelProviderLocal::createChannel( std::cout << "ChannelProviderLocal::createChannel"; std::cout << " channelName " << channelName << std::endl; } + pvRecord->addPVRecordClient(channel); channelList.insert(channel); return channel; } diff --git a/src/pvAccess/channelProviderLocal.h b/src/pvAccess/channelProviderLocal.h index 1c995d0..4389d7e 100644 --- a/src/pvAccess/channelProviderLocal.h +++ b/src/pvAccess/channelProviderLocal.h @@ -137,6 +137,7 @@ private: class ChannelLocal : public epics::pvAccess::Channel, + public PVRecordClient, public std::tr1::enable_shared_from_this { public: @@ -190,6 +191,7 @@ public: epics::pvData::PVStructurePtr const &pvRequest); virtual void printInfo(); virtual void printInfo(epics::pvData::StringBuilder out); + virtual void detach(PVRecordPtr const &pvRecord); // following called by derived classes void addChannelProcess(epics::pvAccess::ChannelProcess::shared_pointer const &); void addChannelGet(epics::pvAccess::ChannelGet::shared_pointer const &);