13 #define epicsExportSharedSymbols 60 pva::Channel::shared_pointer
const &
channel)
67 ChannelCacheEntry::shared_pointer
chan(this->
chan.lock());
76 switch(connectionState)
81 chan->cache->entries.erase(
chan->channelName);
92 FOREACH(ChannelCacheEntry::interested_t::vector_type::const_iterator, it, end,
interested)
95 pva::ChannelRequester::shared_pointer req(chan->
requester.lock());
97 req->channelStateChange(*it, connectionState);
110 std::set<ChannelCacheEntry::shared_pointer> cleaned;
116 ChannelCache::entries_t::iterator cur=cache->
entries.begin(), next, end=cache->
entries.end();
121 if(!cur->second->dropPoke && cur->second->interested.empty()) {
122 cleaned.insert(cur->second);
126 cur->second->dropPoke =
false;
132 return epicsTimerNotify::expireStatus(epicsTimerNotify::restart, 30.0);
144 throw std::logic_error(
"Missing 'pva' provider");
165 ChannelCacheEntry::shared_pointer
168 ChannelCacheEntry::shared_pointer ret;
172 entries_t::const_iterator it =
entries.find(newName);
183 pva::Channel::shared_pointer M;
188 M =
provider->createChannel(newName, ent->requester);
197 }
else if(it->second->channel && it->second->channel->isConnected()) {
201 it->second->dropPoke =
true;
205 it->second->dropPoke =
true;
#define assert(exp)
Declare that a condition should be true.
epics::pvAccess::Channel::shared_pointer channel
#define FOREACH(ITERTYPE, IT, END, C)
#define THROW_EXCEPTION2(TYPE, MSG)
virtual void channelCreated(const epics::pvData::Status &status, epics::pvAccess::Channel::shared_pointer const &channel)
virtual std::string getRequesterName()
epics::pvAccess::ChannelProvider::shared_pointer provider
ChannelCache(const epics::pvAccess::ChannelProvider::shared_pointer &prov)
epicsTimer & createTimer()
ChannelCacheEntry::weak_pointer chan
virtual void channelStateChange(epics::pvAccess::Channel::shared_pointer const &channel, epics::pvAccess::Channel::ConnectionState connectionState)
EPICS_ATOMIC_INLINE size_t epicsAtomicDecrSizeT(size_t *pTarget)
virtual ~ChannelCacheEntry()
APIs for the epicsMutex mutual exclusion semaphore.
char * allocate(unsigned int n)
std::map< std::string, ChannelCacheEntry::shared_pointer > entries_t
const requester_type::weak_pointer requester
#define epicsThreadPriorityCAServerLow
ChannelCacheEntry::shared_pointer lookup(const std::string &name)
static size_t num_instances
std::vector< value_pointer > vector_type
epicsTimerNotify::expireStatus expire(const epicsTime ¤tTime)
static size_t num_instances
CRequester(const ChannelCacheEntry::shared_pointer &p)
EPICS_ATOMIC_INLINE size_t epicsAtomicIncrSizeT(size_t *pTarget)
cacheClean(ChannelCache *c)
ChannelCacheEntry(ChannelCache *, const std::string &n)