From 146b445832fe80f5da60f50adb433637218f48ab Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 30 Aug 2017 17:51:52 -0500 Subject: [PATCH] caProvider add reftrack counters --- src/ca/caChannel.cpp | 17 +++++++++++++++-- src/ca/caChannel.h | 8 ++++++++ src/ca/caProvider.cpp | 11 +++++++++++ src/ca/caProviderPvt.h | 2 ++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/ca/caChannel.cpp b/src/ca/caChannel.cpp index d65f142..1ea3ba3 100644 --- a/src/ca/caChannel.cpp +++ b/src/ca/caChannel.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "caChannel.h" #include @@ -344,6 +345,8 @@ void CAChannel::disconnected() EXCEPTION_GUARD(channelRequester->channelStateChange(shared_from_this(), Channel::DISCONNECTED)); } +size_t CAChannel::num_instances; + CAChannel::CAChannel(std::string const & _channelName, CAChannelProvider::shared_pointer const & _channelProvider, ChannelRequester::shared_pointer const & _channelRequester) : @@ -355,6 +358,7 @@ CAChannel::CAChannel(std::string const & _channelName, elementCount(0), destroyed(false) { + REFTRACE_INCREMENT(num_instances); PVACCESS_REFCOUNT_MONITOR_CONSTRUCT(caChannel); } @@ -431,6 +435,7 @@ CAChannel::~CAChannel() /* Clear CA Channel */ threadAttach(); ca_clear_channel(channelID); + REFTRACE_DECREMENT(num_instances); } @@ -647,6 +652,7 @@ static chtype getDBRType(PVStructure::shared_pointer const & pvRequest, chtype n return nativeType; } +size_t CAChannelGet::num_instances; CAChannelGet::CAChannelGet(CAChannel::shared_pointer const & channel, ChannelGetRequester::shared_pointer const & channelGetRequester, @@ -657,11 +663,12 @@ CAChannelGet::CAChannelGet(CAChannel::shared_pointer const & channel, pvRequest(pvRequest), lastRequestFlag(false) { - + REFTRACE_INCREMENT(num_instances); } CAChannelGet::~CAChannelGet() { + REFTRACE_DECREMENT(num_instances); } void CAChannelGet::activate() @@ -1156,8 +1163,10 @@ CAChannelPutPtr CAChannelPut::create( CAChannelPut::~CAChannelPut() { + REFTRACE_DECREMENT(num_instances); } +size_t CAChannelPut::num_instances; CAChannelPut::CAChannelPut(CAChannel::shared_pointer const & channel, ChannelPutRequester::shared_pointer const & channelPutRequester, @@ -1169,7 +1178,7 @@ CAChannelPut::CAChannelPut(CAChannel::shared_pointer const & channel, block(false), lastRequestFlag(false) { - + REFTRACE_INCREMENT(num_instances); } void CAChannelPut::activate() @@ -1649,8 +1658,11 @@ CAChannelMonitor::~CAChannelMonitor() if(!isStarted) return; channel->threadAttach(); ca_clear_subscription(eventID); + REFTRACE_DECREMENT(num_instances); } +size_t CAChannelMonitor::num_instances; + CAChannelMonitor::CAChannelMonitor( CAChannel::shared_pointer const & channel, MonitorRequester::shared_pointer const & monitorRequester, @@ -1661,6 +1673,7 @@ CAChannelMonitor::CAChannelMonitor( pvRequest(pvRequest), isStarted(false) { + REFTRACE_INCREMENT(num_instances); } void CAChannelMonitor::activate() diff --git a/src/ca/caChannel.h b/src/ca/caChannel.h index cc234d4..912c8bc 100644 --- a/src/ca/caChannel.h +++ b/src/ca/caChannel.h @@ -46,6 +46,8 @@ class CAChannel : public: POINTER_DEFINITIONS(CAChannel); + static size_t num_instances; + static shared_pointer create(CAChannelProvider::shared_pointer const & channelProvider, std::string const & channelName, short priority, @@ -139,6 +141,8 @@ class CAChannelGet : public: POINTER_DEFINITIONS(CAChannelGet); + static size_t num_instances; + static CAChannelGet::shared_pointer create(CAChannel::shared_pointer const & channel, ChannelGetRequester::shared_pointer const & channelGetRequester, epics::pvData::PVStructure::shared_pointer const & pvRequest); @@ -198,6 +202,8 @@ class CAChannelPut : public: POINTER_DEFINITIONS(CAChannelPut); + static size_t num_instances; + static CAChannelPut::shared_pointer create(CAChannel::shared_pointer const & channel, ChannelPutRequester::shared_pointer const & channelPutRequester, epics::pvData::PVStructure::shared_pointer const & pvRequest); @@ -267,6 +273,8 @@ class CAChannelMonitor : public: POINTER_DEFINITIONS(CAChannelMonitor); + static size_t num_instances; + static CAChannelMonitor::shared_pointer create(CAChannel::shared_pointer const & channel, MonitorRequester::shared_pointer const & monitorRequester, epics::pvData::PVStructure::shared_pointer const & pvRequest); diff --git a/src/ca/caProvider.cpp b/src/ca/caProvider.cpp index af6f6b1..425d653 100644 --- a/src/ca/caProvider.cpp +++ b/src/ca/caProvider.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #define epicsExportSharedSymbols #include @@ -30,8 +31,11 @@ using namespace epics::pvData; catch (std::exception &e) { LOG(logLevelError, "Unhandled exception caught from client code at %s:%d: %s", __FILE__, __LINE__, e.what()); } \ catch (...) { LOG(logLevelError, "Unhandled exception caught from client code at %s:%d.", __FILE__, __LINE__); } +size_t CAChannelProvider::num_instances; + CAChannelProvider::CAChannelProvider() : current_context(0), destroyed(false) { + REFTRACE_INCREMENT(num_instances); initialize(); } @@ -39,6 +43,7 @@ CAChannelProvider::CAChannelProvider(const std::tr1::shared_ptr&) : current_context(0) , destroyed(false) { + REFTRACE_INCREMENT(num_instances); // Ignoring Configuration as CA only allows config via. environment, // and we don't want to change this here. initialize(); @@ -48,6 +53,7 @@ CAChannelProvider::~CAChannelProvider() { // call destroy() to destroy CA context destroy(); + REFTRACE_DECREMENT(num_instances); } std::string CAChannelProvider::getProviderName() @@ -194,6 +200,11 @@ void CAClientFactory::start() { epicsSignalInstallSigAlarmIgnore(); epicsSignalInstallSigPipeIgnore(); + registerRefCounter("CAChannelProvider", &CAChannelProvider::num_instances); + registerRefCounter("CAChannel", &CAChannel::num_instances); + registerRefCounter("CAChannelGet", &CAChannelGet::num_instances); + registerRefCounter("CAChannelPut", &CAChannelPut::num_instances); + registerRefCounter("CAChannelMonitor", &CAChannelMonitor::num_instances); if(ChannelProviderRegistry::clients()->add("ca", false)) epicsAtExit(&ca_factory_cleanup, NULL); diff --git a/src/ca/caProviderPvt.h b/src/ca/caProviderPvt.h index f75c7f8..a9bc404 100644 --- a/src/ca/caProviderPvt.h +++ b/src/ca/caProviderPvt.h @@ -26,6 +26,8 @@ class CAChannelProvider : public: POINTER_DEFINITIONS(CAChannelProvider); + static size_t num_instances; + CAChannelProvider(); CAChannelProvider(const std::tr1::shared_ptr&); virtual ~CAChannelProvider();