reftrack more classes

include the common abstract bases used by all ChannelProviders.
This commit is contained in:
Michael Davidsaver
2017-08-31 11:39:13 -05:00
parent f1e938b039
commit 79874e1811
7 changed files with 96 additions and 8 deletions

View File

@@ -152,7 +152,10 @@ struct epicsShareClass ChannelBaseRequester : virtual public epics::pvData::Requ
{
POINTER_DEFINITIONS(ChannelBaseRequester);
virtual ~ChannelBaseRequester() {}
static size_t num_instances;
ChannelBaseRequester();
virtual ~ChannelBaseRequester();
/** Notification when underlying Channel becomes DISCONNECTED or DESTORYED
*
@@ -167,6 +170,10 @@ struct epicsShareClass ChannelBaseRequester : virtual public epics::pvData::Requ
* @param destroy true for final disconnect.
*/
virtual void channelDisconnect(bool destroy) {}
private:
ChannelBaseRequester(const ChannelBaseRequester&);
ChannelBaseRequester& operator=(const ChannelBaseRequester&);
};
/**
@@ -176,7 +183,10 @@ class epicsShareClass ChannelRequest : public virtual Destroyable, public Lockab
public:
POINTER_DEFINITIONS(ChannelRequest);
virtual ~ChannelRequest() {}
static size_t num_instances;
ChannelRequest();
virtual ~ChannelRequest();
/**
* Get a channel instance this request belongs to.
@@ -199,6 +209,10 @@ public:
* When last request will be completed (regardless of completion status) the remote and local instance will be destroyed.
*/
virtual void lastRequest() = 0;
private:
ChannelRequest(const ChannelRequest&);
ChannelRequest& operator=(const ChannelRequest&);
};
/**
@@ -1051,7 +1065,10 @@ public:
*
* See ChannelProvider::createChannel()
*/
class epicsShareClass ChannelRequester : public virtual Requester {
class epicsShareClass ChannelRequester : public virtual Requester
{
ChannelRequester(const ChannelRequester&);
ChannelRequester& operator=(const ChannelRequester&);
public:
POINTER_DEFINITIONS(ChannelRequester);
typedef Channel operation_type;
@@ -1117,7 +1134,10 @@ enum FlushStrategy {
*
* Uniquely configurable (via ChannelProviderFactory::newInstance(Configuration*)
*/
class epicsShareClass ChannelProvider : public Destroyable, private epics::pvData::NoDefaultMethods {
class epicsShareClass ChannelProvider : public Destroyable, private epics::pvData::NoDefaultMethods
{
ChannelProvider(const ChannelProvider&);
ChannelProvider& operator=(const ChannelProvider&);
public:
POINTER_DEFINITIONS(ChannelProvider);
@@ -1134,7 +1154,10 @@ public:
/** OPI priority. */
static const short PRIORITY_OPI = PRIORITY_MIN;
virtual ~ChannelProvider() {}
static size_t num_instances;
ChannelProvider();
virtual ~ChannelProvider();
/**
* Get the provider name.

View File

@@ -120,6 +120,41 @@ ChannelArray::shared_pointer Channel::createChannelArray(
return ret;
}
size_t ChannelProvider::num_instances;
ChannelProvider::ChannelProvider()
{
REFTRACE_INCREMENT(num_instances);
}
ChannelProvider::~ChannelProvider()
{
REFTRACE_DECREMENT(num_instances);
}
size_t ChannelBaseRequester::num_instances;
ChannelBaseRequester::ChannelBaseRequester()
{
REFTRACE_INCREMENT(num_instances);
}
ChannelBaseRequester::~ChannelBaseRequester()
{
REFTRACE_DECREMENT(num_instances);
}
size_t ChannelRequest::num_instances;
ChannelRequest::ChannelRequest()
{
REFTRACE_INCREMENT(num_instances);
}
ChannelRequest::~ChannelRequest()
{
REFTRACE_DECREMENT(num_instances);
}
size_t ChannelRequester::num_instances;

View File

@@ -20,6 +20,7 @@
#include <pv/factory.h>
#include "pv/codec.h"
#include <pv/serverContextImpl.h>
#include <pv/serverChannelImpl.h>
using namespace epics::pvData;
using std::string;
@@ -160,9 +161,14 @@ epicsThreadOnceId providerRegOnce = EPICS_THREAD_ONCE_INIT;
void providerRegInit(void*)
{
providerRegGbl = new providerRegGbl_t;
registerRefCounter("ServerContext (PVA)", &ServerContextImpl::num_instances);
registerRefCounter("ServerContextImpl", &ServerContextImpl::num_instances);
registerRefCounter("ServerChannelImpl", &ServerChannelImpl::num_instances);
registerRefCounter("BlockingTCPTransportCodec", &detail::BlockingTCPTransportCodec::num_instances);
registerRefCounter("ChannelRequester", &ChannelRequester::num_instances);
registerRefCounter("ChannelProvider (ABC)", &ChannelProvider::num_instances);
registerRefCounter("ChannelRequester (ABC)", &ChannelRequester::num_instances);
registerRefCounter("ChannelBaseRequester (ABC)", &ChannelBaseRequester::num_instances);
registerRefCounter("ChannelRequest (ABC)", &ChannelRequest::num_instances);
registerRefCounter("ResponseHandler (ABC)", &ResponseHandler::num_instances);
}
} // namespace

View File

@@ -9,6 +9,7 @@
#include <osiSock.h>
#include <pv/byteBuffer.h>
#include <pv/reftrack.h>
#define epicsExportSharedSymbols
#include <pv/remote.h>
@@ -22,6 +23,18 @@ using namespace epics::pvData;
namespace epics {
namespace pvAccess {
size_t ResponseHandler::num_instances;
ResponseHandler::ResponseHandler()
{
REFTRACE_INCREMENT(num_instances);
}
ResponseHandler::~ResponseHandler()
{
REFTRACE_DECREMENT(num_instances);
}
void AbstractResponseHandler::handleResponse(osiSockAddr* responseFrom,
Transport::shared_pointer const & transport, int8 version, int8 command,
size_t payloadSize, ByteBuffer* payloadBuffer) {

View File

@@ -356,7 +356,10 @@ class ResponseHandler {
public:
POINTER_DEFINITIONS(ResponseHandler);
virtual ~ResponseHandler() {}
static size_t num_instances;
ResponseHandler();
virtual ~ResponseHandler();
/**
* Handle response.

View File

@@ -20,6 +20,8 @@ class ServerChannelImpl : public ServerChannel
public:
POINTER_DEFINITIONS(ServerChannelImpl);
static size_t num_instances;
/**
* Create server channel for given process variable.
* @param channel local channel.

View File

@@ -4,6 +4,8 @@
* in file LICENSE that is included with this distribution.
*/
#include <pv/reftrack.h>
#define epicsExportSharedSymbols
#include <pv/serverChannelImpl.h>
@@ -12,6 +14,8 @@ using namespace epics::pvData;
namespace epics {
namespace pvAccess {
size_t ServerChannelImpl::num_instances;
ServerChannelImpl::ServerChannelImpl(Channel::shared_pointer const & channel,
const ChannelRequester::shared_pointer &requester,
pvAccessID cid, pvAccessID sid,
@@ -23,6 +27,7 @@ ServerChannelImpl::ServerChannelImpl(Channel::shared_pointer const & channel,
_destroyed(false),
_channelSecuritySession(css)
{
REFTRACE_INCREMENT(num_instances);
if (!channel.get())
{
THROW_BASE_EXCEPTION("non-null channel required");
@@ -109,6 +114,7 @@ void ServerChannelImpl::destroy()
ServerChannelImpl::~ServerChannelImpl()
{
destroy();
REFTRACE_DECREMENT(num_instances);
}
void ServerChannelImpl::printInfo()