make more compatible with pvDatabaseJava; work on on-line delete and also termination

This commit is contained in:
mrkraimer
2016-07-01 10:27:04 -04:00
parent 75849c6676
commit 0784cc15d0
12 changed files with 89 additions and 123 deletions

View File

@@ -53,7 +53,7 @@ public:
}
virtual ChannelProvider::shared_pointer newInstance()
{
return channelProvider;
throw std::logic_error("newInstance not Implemented");
}
private:
LocalChannelProviderFactory(
@@ -76,7 +76,7 @@ ChannelProviderLocalPtr getChannelProviderLocal()
channelProviderLocal->channelFinder =
SyncChannelFind::shared_pointer(new SyncChannelFind(xxx));
LocalChannelProviderFactoryPtr factory(LocalChannelProviderFactory::create(channelProviderLocal));
registerChannelProviderFactory(factory);
}
return channelProviderLocal;
}
@@ -89,7 +89,6 @@ ChannelProviderLocal::ChannelProviderLocal()
ChannelProviderLocal::~ChannelProviderLocal()
{
// TODO should I call destroy() here
destroy();
}
@@ -99,6 +98,7 @@ void ChannelProviderLocal::destroy()
if(beingDestroyed) return;
beingDestroyed = true;
pvDatabase->destroy();
pvDatabase.reset();
}
string ChannelProviderLocal::getProviderName()
@@ -145,15 +145,6 @@ Channel::shared_pointer ChannelProviderLocal::createChannel(
string const & channelName,
ChannelRequester::shared_pointer const &channelRequester,
short priority)
{
return createChannel(channelName,channelRequester,priority,"");
}
Channel::shared_pointer ChannelProviderLocal::createChannel(
string const & channelName,
ChannelRequester::shared_pointer const &channelRequester,
short priority,
string const &address)
{
Lock xx(mutex);
PVRecordPtr pvRecord = pvDatabase->findRecord(channelName);
@@ -171,6 +162,17 @@ Channel::shared_pointer ChannelProviderLocal::createChannel(
notFoundStatus,
Channel::shared_pointer());
return Channel::shared_pointer();
}
Channel::shared_pointer ChannelProviderLocal::createChannel(
string const & channelName,
ChannelRequester::shared_pointer const &channelRequester,
short priority,
string const &address)
{
if(!address.empty()) throw std::invalid_argument("address not allowed for local implementation");
return createChannel(channelName, channelRequester, priority);
}
}}