This is Unofficial EPICS BASE Doxygen Site
timerQueueActiveMgr Class Reference

#include "timerPrivate.h"

Public Types

typedef epicsSingleton< timerQueueActiveMgr >::reference RefThis
 

Public Member Functions

 timerQueueActiveMgr ()
 
 ~timerQueueActiveMgr ()
 
epicsTimerQueueActiveForCallocate (RefThis &, bool okToShare, unsigned threadPriority=epicsThreadPriorityMin+10)
 
void release (epicsTimerQueueActiveForC &)
 

Detailed Description

Definition at line 163 of file timerPrivate.h.

Member Typedef Documentation

Definition at line 165 of file timerPrivate.h.

Constructor & Destructor Documentation

timerQueueActiveMgr::timerQueueActiveMgr ( )

Definition at line 21 of file timerQueueActiveMgr.cpp.

22  :mutex(__FILE__, __LINE__)
23 {
24 }
timerQueueActiveMgr::~timerQueueActiveMgr ( )

Definition at line 26 of file timerQueueActiveMgr.cpp.

27 {
28  epicsGuard < epicsMutex > locker ( this->mutex );
29 }

Member Function Documentation

epicsTimerQueueActiveForC & timerQueueActiveMgr::allocate ( RefThis refThis,
bool  okToShare,
unsigned  threadPriority = epicsThreadPriorityMin + 10 
)

Definition at line 32 of file timerQueueActiveMgr.cpp.

33 {
34  epicsGuard < epicsMutex > locker ( this->mutex );
35  if ( okToShare ) {
36  tsDLIter < epicsTimerQueueActiveForC > iter = this->sharedQueueList.firstIter ();
37  while ( iter.valid () ) {
38  if ( iter->threadPriority () == threadPriority ) {
39  assert ( iter->timerQueueActiveMgrPrivate::referenceCount < UINT_MAX );
40  iter->timerQueueActiveMgrPrivate::referenceCount++;
41  return *iter;
42  }
43  iter++;
44  }
45  }
46 
48  * new epicsTimerQueueActiveForC ( refThis, okToShare, threadPriority );
49  queue.timerQueueActiveMgrPrivate::referenceCount = 1u;
50  if ( okToShare ) {
51  this->sharedQueueList.add ( queue );
52  }
53  return queue;
54 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
void add(T &item)
Definition: tsDLList.h:313
tsDLIterConst< T > firstIter() const
Definition: tsDLList.h:459
unsigned threadPriority() const
Definition: timerPrivate.h:233
bool valid() const
Definition: tsDLList.h:607
void timerQueueActiveMgr::release ( epicsTimerQueueActiveForC queue)

Definition at line 57 of file timerQueueActiveMgr.cpp.

58 {
59  {
60  epicsGuard < epicsMutex > locker ( this->mutex );
61  assert ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u );
62  queue.timerQueueActiveMgrPrivate::referenceCount--;
63  if ( queue.timerQueueActiveMgrPrivate::referenceCount > 0u ) {
64  return;
65  }
66  else if ( queue.sharingOK () ) {
67  this->sharedQueueList.remove ( queue );
68  }
69  }
70  // delete only after we release the guard in case the embedded
71  // reference is the last one and this object is destroyed
72  // as a side effect
73  timerQueueActiveMgrPrivate * pPriv = & queue;
74  delete pPriv;
75 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
void remove(T &item)
Definition: tsDLList.h:219
bool sharingOK() const
Definition: timerPrivate.h:228

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