17 #define epicsAssertAuthor "Jeff Hill johill@lanl.gov" 28 client ( cacIn ), magic ( CASG_MAGIC )
30 client.installCASG ( guard, *
this );
43 if ( this->
verify ( guard ) ) {
44 this->
reset ( cbGuard, guard );
45 this->
client.uninstallCASG ( guard, *
this );
49 this->
printFormated (
"cac: attempt to destroy invalid sync group ignored\n" );
56 return ( this->
magic == CASG_MAGIC );
81 if ( timeout < 0.0 ) {
85 cur_time = epicsTime::getCurrent ();
87 this->
client.flush ( guard );
93 if ( this->ioPendingList.count() == 0u ) {
98 remaining = timeout - delay;
112 this->
sem.wait ( remaining );
117 this->
sem.wait ( remaining );
123 cur_time = epicsTime::getCurrent ();
125 delay = cur_time - beg_time;
148 pNotify->
destroy ( cbGuard, guard );
158 pNotify->cancel ( cbGuard, guard );
162 if ( pNotify->ioPending ( guard ) ) {
163 this->ioPendingList.remove ( *pNotify );
168 pNotify->destroy ( cbGuard, guard );
175 this->
show ( guard, level );
182 ::printf (
"Sync Group: id=%u, magic=%u, opPend=%u\n",
183 this->
getId (), this->
magic, this->ioPendingList.count () );
187 this->ioPendingList.firstIter ();
188 while ( notifyPending.
valid () ) {
189 notifyPending->
show ( guard, level - 1u );
195 while ( notifyCompleted.
valid () ) {
196 notifyCompleted->
show ( guard, level - 1u );
208 return this->ioPendingList.count () == 0u;
218 pNotify->
begin ( guard, type, count, pValue );
229 pNotify->
begin ( guard, type, count );
237 this->ioPendingList.remove ( notify );
239 if ( this->ioPendingList.count () == 0u ) {
263 va_start ( theArgs, pformat );
265 status = this->
client.varArgsPrintFormated ( pformat, theArgs );
272 void CASG::exception (
284 void CASG::exception (
298 void CASG::operator
delete (
void * )
305 errlogPrintf (
"%s:%d this compiler is confused about placement delete - memory was probably leaked",
306 __FILE__, __LINE__ );
void exception epicsGuard< epicsMutex > int const char const char unsigned oldChannelNotify & chan
void reset(CallbackGuard &, epicsGuard< epicsMutex > &)
tsFreeList< class syncGroupReadNotify, 128, epicsMutexNOOP > freeListReadOP
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
static syncGroupReadNotify * factory(tsFreeList< class syncGroupReadNotify, 128, epicsMutexNOOP > &, CASG &, PRecycleFunc, chid, void *pValueIn)
void destructor(CallbackGuard &, epicsGuard< epicsMutex > &guard)
void assertIdenticalMutex(const T &) const
void exception epicsGuard< epicsMutex > int const char const char unsigned oldChannelNotify unsigned type
void recycleReadNotifyIO(epicsGuard< epicsMutex > &, syncGroupReadNotify &)
epicsThreadPrivateId caClientCallbackThreadId
const unsigned getId() const
virtual void show(epicsGuard< epicsMutex > &, unsigned level) const =0
void show(epicsGuard< epicsMutex > &, unsigned level) const
bool verify(epicsGuard< epicsMutex > &) const
void exception epicsGuard< epicsMutex > int const char const char unsigned oldChannelNotify unsigned arrayElementCount unsigned op
int block(epicsGuard< epicsMutex > *pcbGuard, epicsGuard< epicsMutex > &guard, double timeout)
static syncGroupWriteNotify * factory(tsFreeList< class syncGroupWriteNotify, 128, epicsMutexNOOP > &, CASG &, PRecycleFunc, chid)
void exception epicsGuard< epicsMutex > int const char const char * pFileName
void exception epicsGuard< epicsMutex > int const char const char unsigned oldChannelNotify unsigned arrayElementCount count
void recycleWriteNotifyIO(epicsGuard< epicsMutex > &, syncGroupWriteNotify &)
int errlogPrintf(const char *pFormat,...)
tsFreeList< class syncGroupWriteNotify, 128, epicsMutexNOOP > freeListWriteOP
bool ioComplete(CallbackGuard &, epicsGuard< epicsMutex > &guard)
virtual void destroy(CallbackGuard &cbGuard, epicsGuard< epicsMutex > &guard)=0
unsigned long arrayElementCount
void put(epicsGuard< epicsMutex > &, chid pChan, unsigned type, arrayElementCount count, const void *pValue)
void destroyPendingIO(CallbackGuard &cbGuard, epicsGuard< epicsMutex > &guard)
void exception epicsGuard< epicsMutex > int const char * pContext
void get(epicsGuard< epicsMutex > &, chid pChan, unsigned type, arrayElementCount count, void *pValue)
epicsPlacementDeleteOperator((void *, tsFreeList< struct CASG, 128, epicsMutexNOOP > &)) private tsDLList< syncGroupNotify ioCompletedList)
void exception epicsGuard< epicsMutex > int status
int printFormated(const char *pFormat,...)
void completionNotify(epicsGuard< epicsMutex > &, syncGroupNotify &)
#define CAC_SIGNIFICANT_DELAY
void begin(epicsGuard< epicsMutex > &, unsigned type, arrayElementCount count)
CASG(epicsGuard< epicsMutex > &, ca_client_context &cacIn)
void destroyCompletedIO(CallbackGuard &cbGuard, epicsGuard< epicsMutex > &guard)
void begin(epicsGuard< epicsMutex > &, unsigned type, arrayElementCount count, const void *pValueIn)
void exception epicsGuard< epicsMutex > int const char const char unsigned lineNo