From 9e92c67924435bae05b73161a84c763497feb27c Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 28 Jan 2016 12:16:30 -0500 Subject: [PATCH] channel cache doesn't need to know about server provider --- p2pApp/chancache.h | 1 - p2pApp/channel.cpp | 12 +++++++----- p2pApp/channel.h | 8 +++++--- p2pApp/server.cpp | 4 +--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/p2pApp/chancache.h b/p2pApp/chancache.h index 29dfee4..13d2b8a 100644 --- a/p2pApp/chancache.h +++ b/p2pApp/chancache.h @@ -147,7 +147,6 @@ struct ChannelCache entries_t entries; epics::pvAccess::ChannelProvider::shared_pointer provider; // client Provider - epics::pvAccess::ChannelProvider::weak_pointer server; // GWServerChannelProvider epicsTimerQueueActive *timerQueue; epicsTimer *cleanTimer; diff --git a/p2pApp/channel.cpp b/p2pApp/channel.cpp index 804359d..14b59cc 100644 --- a/p2pApp/channel.cpp +++ b/p2pApp/channel.cpp @@ -11,12 +11,14 @@ namespace pvd = epics::pvData; size_t GWChannel::num_instances; -GWChannel::GWChannel(ChannelCacheEntry::shared_pointer e, - pva::ChannelRequester::shared_pointer r, - std::string addr) +GWChannel::GWChannel(const ChannelCacheEntry::shared_pointer& e, + const epics::pvAccess::ChannelProvider::weak_pointer& srvprov, + const pva::ChannelRequester::shared_pointer& r, + const std::string& addr) :entry(e) ,requester(r) ,address(addr) + ,server_provder(srvprov) { epicsAtomicIncrSizeT(&num_instances); } @@ -46,7 +48,7 @@ GWChannel::destroy() std::tr1::shared_ptr GWChannel::getProvider() { - return entry->cache->server.lock(); + return server_provder.lock(); } std::string @@ -164,7 +166,7 @@ GWChannel::createMonitor( ment = entry->mon_entries.find(ser); if(!ment) { - ment.reset(new MonitorCacheEntry(entry.get())); + ment.reset(new MonitorCacheEntry(entry.get(), pvRequest)); entry->mon_entries[ser] = ment; // ref. wrapped ment->weakref = ment; diff --git a/p2pApp/channel.h b/p2pApp/channel.h index d28d099..04bfa6f 100644 --- a/p2pApp/channel.h +++ b/p2pApp/channel.h @@ -14,10 +14,12 @@ struct GWChannel : public epics::pvAccess::Channel const ChannelCacheEntry::shared_pointer entry; const epics::pvAccess::ChannelRequester::shared_pointer requester; const std::string address; // address of client on GW server side + const epics::pvAccess::ChannelProvider::weak_pointer server_provder; - GWChannel(ChannelCacheEntry::shared_pointer e, - epics::pvAccess::ChannelRequester::shared_pointer, - std::string addr); + GWChannel(const ChannelCacheEntry::shared_pointer& e, + const epics::pvAccess::ChannelProvider::weak_pointer& srvprov, + const epics::pvAccess::ChannelRequester::shared_pointer&, + const std::string& addr); virtual ~GWChannel(); diff --git a/p2pApp/server.cpp b/p2pApp/server.cpp index 77422e9..cbf1d1f 100644 --- a/p2pApp/server.cpp +++ b/p2pApp/server.cpp @@ -137,7 +137,7 @@ struct GWServerChannelProvider : public if(it!=cache.entries.end() && it->second->channel && it->second->channel->isConnected()) { - ret.reset(new GWChannel(it->second, channelRequester, address)); + ret.reset(new GWChannel(it->second, shared_from_this(), channelRequester, address)); it->second->interested.insert(ret); ret->weakref = ret; } @@ -189,7 +189,6 @@ struct GWServerChannelProviderFactory : public pva::ChannelProviderFactory pva::ChannelProvider::shared_pointer P(last_provider.lock()); if(!P) { P.reset(new GWServerChannelProvider); - ((GWServerChannelProvider*)P.get())->cache.server = P; last_provider = P; } return P; @@ -198,7 +197,6 @@ struct GWServerChannelProviderFactory : public pva::ChannelProviderFactory virtual pva::ChannelProvider::shared_pointer newInstance() { pva::ChannelProvider::shared_pointer P(new GWServerChannelProvider); - ((GWServerChannelProvider*)P.get())->cache.server = P; last_provider = P; return P; }