ca: destruction, enum labels support

This commit is contained in:
Matej Sekoranja
2013-06-05 20:50:04 +02:00
parent a20dd07b85
commit b136fce5fd
4 changed files with 174 additions and 42 deletions

View File

@@ -8,6 +8,8 @@
#include <pv/caProvider.h>
#include <pv/caChannel.h>
#include <algorithm>
/* for CA */
#include <cadef.h>
#include <epicsSignal.h>
@@ -36,12 +38,6 @@ epics::pvData::String CAChannelProvider::getProviderName()
return PROVIDER_NAME;
}
void CAChannelProvider::destroy()
{
/* Shut down Channel Access */
ca_context_destroy();
}
ChannelFind::shared_pointer CAChannelProvider::channelFind(
epics::pvData::String const & channelName,
ChannelFindRequester::shared_pointer const & channelFindRequester)
@@ -91,6 +87,34 @@ void CAChannelProvider::poll()
{
}
void CAChannelProvider::destroy()
{
Lock lock(channelsMutex);
{
while (!channels.empty())
{
Channel::shared_pointer channel = channels.rbegin()->second.lock();
if (channel)
channel->destroy();
}
}
/* Destroy CA Context */
ca_context_destroy();
}
void CAChannelProvider::registerChannel(Channel::shared_pointer const & channel)
{
Lock lock(channelsMutex);
channels[channel.get()] = Channel::weak_pointer(channel);
}
void CAChannelProvider::unregisterChannel(Channel::shared_pointer const & channel)
{
Lock lock(channelsMutex);
channels.erase(channel.get());
}
void CAChannelProvider::initialize()
{
/* Create Channel Access */