ca: destruction, enum labels support
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user