diff --git a/src/ca/caChannel.cpp b/src/ca/caChannel.cpp index ef3d92d..1146fb6 100644 --- a/src/ca/caChannel.cpp +++ b/src/ca/caChannel.cpp @@ -368,8 +368,7 @@ CAChannel::CAChannel(std::string const & _channelName, channelRequester(_channelRequester), channelID(0), channelType(0), - elementCount(0), - destroyed(false) + elementCount(0) { REFTRACE_INCREMENT(num_instances); PVACCESS_REFCOUNT_MONITOR_CONSTRUCT(caChannel); @@ -439,12 +438,6 @@ CAChannel::~CAChannel() cout << "CAChannel::~CAChannel() " << channelName << endl; } PVACCESS_REFCOUNT_MONITOR_DESTRUCT(caChannel); - { - Lock lock(requestsMutex); - if (destroyed) - return; - destroyed = true; - } /* Clear CA Channel */ threadAttach(); ca_clear_channel(channelID); @@ -599,14 +592,6 @@ void CAChannel::printInfo(std::ostream& out) } -/* --------------- Destroyable --------------- */ - - -void CAChannel::destroy() -{ -std::cerr << "Why is CAChannel::destroy() being called\n"; -} - /* ---------------------------------------------------------- */ void CAChannel::threadAttach() @@ -666,8 +651,7 @@ CAChannelGet::CAChannelGet(CAChannel::shared_pointer const & channel, : channel(channel), channelGetRequester(channelGetRequester), - pvRequest(pvRequest), - lastRequestFlag(false) + pvRequest(pvRequest) { REFTRACE_INCREMENT(num_instances); if(DEBUG_LEVEL>0) { @@ -1145,8 +1129,6 @@ void CAChannelGet::get() EXCEPTION_GUARD(getRequester->getDone(errorStatus, shared_from_this(), PVStructure::shared_pointer(), BitSet::shared_pointer())); } - if (lastRequestFlag) - destroy(); } @@ -1164,17 +1146,12 @@ void CAChannelGet::cancel() void CAChannelGet::lastRequest() { - // TODO sync !!! - lastRequestFlag = true; + std::cout << "CAChannelGet::lastRequest() " + << channel->getChannelName() + << " does not do anything" + << endl; } -/* --------------- Destroyable --------------- */ - - -void CAChannelGet::destroy() -{ - // TODO -} CAChannelPutPtr CAChannelPut::create( @@ -1203,8 +1180,7 @@ CAChannelPut::CAChannelPut(CAChannel::shared_pointer const & channel, channel(channel), channelPutRequester(channelPutRequester), pvRequest(pvRequest), - block(false), - lastRequestFlag(false) + block(false) { REFTRACE_INCREMENT(num_instances); if(DEBUG_LEVEL>0) { @@ -1521,9 +1497,6 @@ void CAChannelPut::put(PVStructure::shared_pointer const & pvPutStructure, std::cout << "no put func implemented" << std::endl; } - // TODO here???!!! - if (lastRequestFlag) - destroy(); } @@ -1551,9 +1524,6 @@ void CAChannelPut::getDone(struct event_handler_args &args) PVStructure::shared_pointer(), BitSet::shared_pointer())); } - // TODO here???!!! - if (lastRequestFlag) - destroy(); } @@ -1593,17 +1563,12 @@ void CAChannelPut::cancel() void CAChannelPut::lastRequest() { - // TODO sync !!! - lastRequestFlag = true; + std::cout << "CAChannelPut::lastRequest() " + << channel->getChannelName() + << " does not do anything" + << endl; } -/* --------------- Destroyable --------------- */ - - -void CAChannelPut::destroy() -{ - // TODO -} /* --------------- Monitor --------------- */ @@ -1900,15 +1865,5 @@ void CAChannelMonitor::cancel() // noop } -/* --------------- Destroyable --------------- */ - - -void CAChannelMonitor::destroy() -{ - if(!isStarted) return; - channel->threadAttach(); - ca_clear_subscription(eventID); - isStarted = false; -} }}} diff --git a/src/ca/caChannel.h b/src/ca/caChannel.h index 4a00d6b..8fd3120 100644 --- a/src/ca/caChannel.h +++ b/src/ca/caChannel.h @@ -90,7 +90,7 @@ public: /* --------------- Destroyable --------------- */ - virtual void destroy(); + virtual void destroy() EPICS_DEPRECATED {}; /* ---------------------------------------------------------------- */ @@ -120,7 +120,6 @@ private: epics::pvData::Mutex requestsMutex; - bool destroyed; std::queue putQueue; std::queue getQueue; std::queue monitorQueue; @@ -169,7 +168,7 @@ public: /* --------------- ChannelBaseRequester --------------- */ virtual void channelDisconnect(bool destroy); /* --------------- Destroyable --------------- */ - virtual void destroy(); + virtual void destroy() EPICS_DEPRECATED {}; void activate(); @@ -182,7 +181,6 @@ private: CAChannelPtr channel; ChannelGetRequester::weak_pointer channelGetRequester; epics::pvData::PVStructure::shared_pointer pvRequest; - bool lastRequestFlag; chtype getType; epics::pvData::PVStructure::shared_pointer pvStructure; @@ -238,7 +236,7 @@ public: virtual void channelDisconnect(bool destroy); /* --------------- Destroyable --------------- */ - virtual void destroy(); + virtual void destroy() EPICS_DEPRECATED {}; void activate(); @@ -252,7 +250,6 @@ private: ChannelPutRequester::weak_pointer channelPutRequester; epics::pvData::PVStructure::shared_pointer pvRequest; bool block; - bool lastRequestFlag; chtype getType; epics::pvData::PVStructure::shared_pointer pvStructure; @@ -302,7 +299,7 @@ public: /* --------------- ChannelBaseRequester --------------- */ virtual void channelDisconnect(bool destroy); /* --------------- Destroyable --------------- */ - virtual void destroy(); + virtual void destroy() EPICS_DEPRECATED {}; void activate(); private: diff --git a/src/ca/caProvider.cpp b/src/ca/caProvider.cpp index 20789b3..b701373 100644 --- a/src/ca/caProvider.cpp +++ b/src/ca/caProvider.cpp @@ -127,10 +127,6 @@ void CAChannelProvider::poll() { } -void CAChannelProvider::destroy() -{ - std::cerr << "CAChannelProvider::destroy() should not be called\n"; -} void CAChannelProvider::threadAttach() { @@ -139,6 +135,7 @@ void CAChannelProvider::threadAttach() void CAChannelProvider::initialize() { + if(DEBUG_LEVEL>0) std::cout << "CAChannelProvider::initialize()\n"; /* Create Channel Access */ int result = ca_context_create(ca_enable_preemptive_callback); if (result != ECA_NORMAL) { @@ -166,6 +163,11 @@ void ca_factory_cleanup(void*) void CAClientFactory::start() { + if(DEBUG_LEVEL>0) std::cout << "CAClientFactory::start()\n"; + if(ChannelProviderRegistry::clients()->getProvider("ca")) { + // do not start twice + return; + } epicsSignalInstallSigAlarmIgnore(); epicsSignalInstallSigPipeIgnore(); registerRefCounter("CAChannelProvider", &CAChannelProvider::num_instances); @@ -175,7 +177,9 @@ void CAClientFactory::start() registerRefCounter("CAChannelMonitor", &CAChannelMonitor::num_instances); if(ChannelProviderRegistry::clients()->add("ca", false)) + { epicsAtExit(&ca_factory_cleanup, NULL); + } } void CAClientFactory::stop() diff --git a/src/ca/caProviderPvt.h b/src/ca/caProviderPvt.h index a0468a5..3e4b3a5 100644 --- a/src/ca/caProviderPvt.h +++ b/src/ca/caProviderPvt.h @@ -11,12 +11,10 @@ #include #include -#include namespace epics { namespace pvAccess { -class Configuration; namespace ca { #define DEBUG_LEVEL 0 @@ -64,20 +62,15 @@ public: virtual void flush(); virtual void poll(); - virtual void destroy(); - + virtual void destroy() EPICS_DEPRECATED {}; /* ---------------------------------------------------------------- */ void threadAttach(); private: - void initialize(); - ca_client_context* current_context; - - epics::pvData::Mutex channelsMutex; }; } diff --git a/src/ca/pv/caProvider.h b/src/ca/pv/caProvider.h index f6291a6..3f75c4a 100644 --- a/src/ca/pv/caProvider.h +++ b/src/ca/pv/caProvider.h @@ -12,7 +12,6 @@ namespace epics { namespace pvAccess { -class Configuration; namespace ca { /**