From b6fbea9610f98fd32939e6c5dee53bc6f99f78b6 Mon Sep 17 00:00:00 2001 From: Ambroz Bizjak Date: Tue, 18 Aug 2015 14:24:10 -0400 Subject: [PATCH] repeaterSubscribeTimer.patch from lp:1479316 --- src/ca/client/repeaterSubscribeTimer.cpp | 7 ++++++- src/ca/client/repeaterSubscribeTimer.h | 3 ++- src/ca/client/udpiiu.cpp | 4 ++-- src/ca/client/udpiiu.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/ca/client/repeaterSubscribeTimer.cpp b/src/ca/client/repeaterSubscribeTimer.cpp index 69362da5f..66788c839 100644 --- a/src/ca/client/repeaterSubscribeTimer.cpp +++ b/src/ca/client/repeaterSubscribeTimer.cpp @@ -66,6 +66,8 @@ void repeaterSubscribeTimer::shutdown ( epicsTimerNotify::expireStatus repeaterSubscribeTimer:: expire ( const epicsTime & /* currentTime */ ) { + epicsGuard < epicsMutex > guard ( this->stateMutex ); + static const unsigned nTriesToMsg = 50; if ( this->attempts > nTriesToMsg && ! this->once ) { callbackManager mgr ( this->ctxNotify, this->cbMutex ); @@ -90,14 +92,17 @@ epicsTimerNotify::expireStatus repeaterSubscribeTimer:: } } -void repeaterSubscribeTimer::show ( unsigned /* level */ ) const +void repeaterSubscribeTimer::show ( unsigned /* level */ ) { + epicsGuard < epicsMutex > guard ( this->stateMutex ); + ::printf ( "repeater subscribe timer: attempts=%u registered=%u once=%u\n", this->attempts, this->registered, this->once ); } void repeaterSubscribeTimer::confirmNotify () { + epicsGuard < epicsMutex > guard ( this->stateMutex ); this->registered = true; } diff --git a/src/ca/client/repeaterSubscribeTimer.h b/src/ca/client/repeaterSubscribeTimer.h index 52f146d6e..d0f7a3fdb 100644 --- a/src/ca/client/repeaterSubscribeTimer.h +++ b/src/ca/client/repeaterSubscribeTimer.h @@ -64,12 +64,13 @@ public: epicsGuard < epicsMutex > & cbGuard, epicsGuard < epicsMutex > & guard ); void confirmNotify (); - void show ( unsigned level ) const; + void show ( unsigned level ); private: epicsTimer & timer; repeaterTimerNotify & iiu; epicsMutex & cbMutex; cacContextNotify & ctxNotify; + epicsMutex stateMutex; unsigned attempts; bool registered; bool once; diff --git a/src/ca/client/udpiiu.cpp b/src/ca/client/udpiiu.cpp index e4e8bd31f..f3f8a5552 100644 --- a/src/ca/client/udpiiu.cpp +++ b/src/ca/client/udpiiu.cpp @@ -1084,7 +1084,7 @@ bool udpiiu :: datagramFlush ( return true; } -void udpiiu :: show ( unsigned level ) const +void udpiiu :: show ( unsigned level ) { epicsGuard < epicsMutex > guard ( this->cacMutex ); @@ -1095,7 +1095,7 @@ void udpiiu :: show ( unsigned level ) const ::printf ( "Search Destination List with %u items\n", _searchDestList.count () ); if ( level > 2u ) { - tsDLIterConst < SearchDest > iter ( + tsDLIter < SearchDest > iter ( _searchDestList.firstIter () ); while ( iter.valid () ) { diff --git a/src/ca/client/udpiiu.h b/src/ca/client/udpiiu.h index 103547919..b3431cb11 100644 --- a/src/ca/client/udpiiu.h +++ b/src/ca/client/udpiiu.h @@ -108,7 +108,7 @@ public: epicsGuard < epicsMutex > & guard ); void shutdown ( epicsGuard < epicsMutex > & cbGuard, epicsGuard < epicsMutex > & guard ); - void show ( unsigned level ) const; + void show ( unsigned level ); // exceptions class noSocket {};