This is Unofficial EPICS BASE Doxygen Site
ChannelCache Struct Reference

#include "chancache.h"

+ Collaboration diagram for ChannelCache:

Classes

struct  cacheClean
 

Public Types

typedef std::map< std::string, ChannelCacheEntry::shared_pointer > entries_t
 

Public Member Functions

 ChannelCache (const epics::pvAccess::ChannelProvider::shared_pointer &prov)
 
 ~ChannelCache ()
 
ChannelCacheEntry::shared_pointer lookup (const std::string &name)
 

Public Attributes

epicsMutex cacheLock
 
entries_t entries
 
epics::pvAccess::ChannelProvider::shared_pointer provider
 
epicsTimerQueueActive * timerQueue
 
epicsTimer * cleanTimer
 
cacheCleancleaner
 
size_t cleanerRuns
 
size_t cleanerDust
 

Detailed Description

Holds the set of channels the GW is searching for, or has found.

Definition at line 153 of file chancache.h.

Member Typedef Documentation

typedef std::map<std::string, ChannelCacheEntry::shared_pointer > ChannelCache::entries_t

Definition at line 155 of file chancache.h.

Constructor & Destructor Documentation

ChannelCache::ChannelCache ( const epics::pvAccess::ChannelProvider::shared_pointer &  prov)

Definition at line 136 of file chancache.cpp.

137  :provider(prov)
139  ,cleaner(new cacheClean(this))
140  ,cleanerRuns(0)
141  ,cleanerDust(0)
142 {
143  if(!provider)
144  throw std::logic_error("Missing 'pva' provider");
147  cleanTimer->start(*cleaner, 30.0);
148 }
epicsTimer * cleanTimer
Definition: chancache.h:165
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
size_t cleanerRuns
Definition: chancache.h:168
epics::pvAccess::ChannelProvider::shared_pointer provider
Definition: chancache.h:162
epicsTimer & createTimer()
Definition: timerQueue.cpp:204
char * allocate(unsigned int n)
Definition: antelope.c:230
size_t cleanerDust
Definition: chancache.h:169
#define epicsThreadPriorityCAServerLow
Definition: epicsThread.h:80
epicsTimerQueueActive * timerQueue
Definition: chancache.h:164
cacheClean * cleaner
Definition: chancache.h:166
ChannelCache::~ChannelCache ( )

Definition at line 150 of file chancache.cpp.

151 {
152  entries_t E;
153  {
154  Guard G(cacheLock);
155 
156  cleanTimer->destroy();
157  timerQueue->release();
158  delete cleaner;
159 
160  entries_t E;
161  E.swap(entries);
162  }
163 }
entries_t entries
Definition: chancache.h:160
epicsTimer * cleanTimer
Definition: chancache.h:165
epicsMutex cacheLock
Definition: chancache.h:158
std::map< std::string, ChannelCacheEntry::shared_pointer > entries_t
Definition: chancache.h:155
cacheClean * cleaner
Definition: chancache.h:166

Member Function Documentation

ChannelCacheEntry::shared_pointer ChannelCache::lookup ( const std::string &  name)

Definition at line 166 of file chancache.cpp.

167 {
168  ChannelCacheEntry::shared_pointer ret;
169 
170  Guard G(cacheLock);
171 
172  entries_t::const_iterator it = entries.find(newName);
173 
174  if(it==entries.end()) {
175  // first request, create ChannelCacheEntry
176  //TODO: async lookup
177 
178  ChannelCacheEntry::shared_pointer ent(new ChannelCacheEntry(this, newName));
179  ent->requester.reset(new ChannelCacheEntry::CRequester(ent));
180 
181  entries[newName] = ent;
182 
183  pva::Channel::shared_pointer M;
184  {
185  // unlock to call createChannel()
187 
188  M = provider->createChannel(newName, ent->requester);
189  if(!M)
190  THROW_EXCEPTION2(std::runtime_error, "Failed to createChannel");
191  }
192  ent->channel = M;
193 
194  if(M->isConnected())
195  ret = ent; // immediate connect, mostly for unit-tests (thus delayed connect not covered)
196 
197  } else if(it->second->channel && it->second->channel->isConnected()) {
198  // another request, and hey we're connected this time
199 
200  ret = it->second;
201  it->second->dropPoke = true;
202 
203  } else {
204  // not connected yet, but a client is still interested
205  it->second->dropPoke = true;
206  }
207 
208  return ret;
209 }
entries_t entries
Definition: chancache.h:160
#define THROW_EXCEPTION2(TYPE, MSG)
epicsMutex cacheLock
Definition: chancache.h:158
epics::pvAccess::ChannelProvider::shared_pointer provider
Definition: chancache.h:162

Member Data Documentation

epicsMutex ChannelCache::cacheLock

Definition at line 158 of file chancache.h.

cacheClean* ChannelCache::cleaner

Definition at line 166 of file chancache.h.

size_t ChannelCache::cleanerDust

Definition at line 169 of file chancache.h.

size_t ChannelCache::cleanerRuns

Definition at line 168 of file chancache.h.

epicsTimer* ChannelCache::cleanTimer

Definition at line 165 of file chancache.h.

entries_t ChannelCache::entries

Definition at line 160 of file chancache.h.

epics::pvAccess::ChannelProvider::shared_pointer ChannelCache::provider

Definition at line 162 of file chancache.h.

epicsTimerQueueActive* ChannelCache::timerQueue

Definition at line 164 of file chancache.h.


The documentation for this struct was generated from the following files: