channel cache doesn't need to know about server provider
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user