channel cache doesn't need to know about server provider

This commit is contained in:
Michael Davidsaver
2016-01-28 12:16:30 -05:00
parent 0995c48f90
commit 9e92c67924
4 changed files with 13 additions and 12 deletions

View File

@ -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;

View File

@ -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<pva::ChannelProvider>
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;

View File

@ -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();

View File

@ -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;
}