diff --git a/pvAccessApp/server/referencedTransportSender.cpp b/pvAccessApp/server/referencedTransportSender.cpp new file mode 100644 index 0000000..c9781a7 --- /dev/null +++ b/pvAccessApp/server/referencedTransportSender.cpp @@ -0,0 +1,29 @@ +/* + * referencedTransportSender.cpp + */ + +#include "referencedTransportSender.h" + +using namespace epics::pvData; + +namespace epics { namespace pvAccess { + +void ReferencedTransportSender::release() +{ + _refMutex.lock(); + _refCount--; + _refMutex.unlock(); + if (_refCount == 0) + { + delete this; + } +} + +void ReferencedTransportSender::acquire() +{ + Lock guard(_refMutex); + _refCount++; +} + +} +} diff --git a/pvAccessApp/server/referencedTransportSender.h b/pvAccessApp/server/referencedTransportSender.h new file mode 100644 index 0000000..fdd27f5 --- /dev/null +++ b/pvAccessApp/server/referencedTransportSender.h @@ -0,0 +1,27 @@ +/* + * referencedTransportSender.h + */ + +#ifndef REFERENCEDTRANSPORTSENDER_H_ +#define REFERENCEDTRANSPORTSENDER_H_ + +#include "remote.h" + +namespace epics { +namespace pvAccess { + +class ReferencedTransportSender : public TransportSender +{ +public: + void release(); + void acquire(); +private: + epics::pvData::Mutex _refMutex; + int32 _refCount; +}; + +} +} + + +#endif /* REFERENCEDTRANSPORTSENDER_H_ */