interim commit

This commit is contained in:
Marty Kraimer
2013-05-29 12:22:50 -04:00
parent 6d894788a3
commit 29df17d580
16 changed files with 189 additions and 169 deletions

View File

@@ -11,7 +11,7 @@
#include <pv/serverContext.h>
#include <pv/channelProviderLocal.h>
#include <pv/channelLocalDebugRecord.h>
#include <pv/channelLocalTraceRecord.h>
namespace epics { namespace pvDatabase {
@@ -81,6 +81,8 @@ std::cout << "LocalChannelCTX::~LocalChannelCTX()" << std::endl;
// we need thead.waitForCompletion()
event.wait();
epicsThreadSleep(1.0);
std::cout << "LocalChannelCTX::run() calling channelProvider->destroy()" << std::endl;
if(channelProvider!=NULL) channelProvider->destroy();
ctx.reset();
channelProvider.reset();
delete thread;
@@ -114,13 +116,13 @@ ChannelProviderLocalPtr getChannelProviderLocal()
ChannelProviderLocal::ChannelProviderLocal()
: pvDatabase(PVDatabase::getMaster()),
beingDestroyed(false),
channelLocalDebug(new ChannelLocalDebug())
channelLocalTrace(new ChannelLocalTrace())
{
}
ChannelProviderLocal::~ChannelProviderLocal()
{
if(channelLocalDebug->getLevel()>0)
if(channelLocalTrace->getLevel()>0)
{
std::cout << "~ChannelProviderLocal()" << std::endl;
}
@@ -129,7 +131,7 @@ ChannelProviderLocal::~ChannelProviderLocal()
void ChannelProviderLocal::destroy()
{
Lock xx(mutex);
if(channelLocalDebug->getLevel()>0)
if(channelLocalTrace->getLevel()>0)
{
std::cout << "ChannelProviderLocal::destroy";
std::cout << " destroyed " << beingDestroyed << std::endl;
@@ -156,6 +158,10 @@ ChannelFind::shared_pointer ChannelProviderLocal::channelFind(
ChannelFindRequester::shared_pointer const &channelFindRequester)
{
Lock xx(mutex);
if(channelLocalTrace->getLevel()>2)
{
std::cout << "ChannelProviderLocal::channelFind" << std::endl;
}
bool found = false;
ChannelLocalList::iterator iter;
for(iter = channelList.begin(); iter!=channelList.end(); ++iter)
@@ -203,25 +209,19 @@ Channel::shared_pointer ChannelProviderLocal::createChannel(
String const &address)
{
Lock xx(mutex);
ChannelLocalList::iterator iter;
for(iter = channelList.begin(); iter!=channelList.end(); ++iter)
{
if((*iter)->getChannelName().compare(channelName)==0) {
return *iter;
}
}
PVRecordPtr pvRecord = pvDatabase->findRecord(channelName);
if(pvRecord.get()!=NULL) {
Channel::shared_pointer channel(new ChannelLocal(
getPtrSelf(),channelRequester,pvRecord,channelLocalDebug));
ChannelLocalPtr channel(new ChannelLocal(
getPtrSelf(),channelRequester,pvRecord,channelLocalTrace));
channelRequester->channelCreated(
Status::Ok,
channel);
if(channelLocalDebug->getLevel()>1)
if(channelLocalTrace->getLevel()>1)
{
std::cout << "ChannelProviderLocal::createChannel";
std::cout << " channelName " << channelName << std::endl;
}
channelList.insert(channel);
return channel;
}
Status notFoundStatus(Status::STATUSTYPE_ERROR,String("pv not found"));
@@ -235,14 +235,19 @@ void ChannelProviderLocal::removeChannel(
Channel::shared_pointer const & channel)
{
Lock xx(mutex);
if(channelLocalTrace->getLevel()>0)
{
std::cout << "ChannelProviderLocal::removeChannel";
std::cout << " destroyed " << beingDestroyed << std::endl;
}
if(beingDestroyed) return;
ChannelLocalList::iterator iter;
for(iter = channelList.begin(); iter!=channelList.end(); ++iter)
{
if((*iter).get()==channel.get()) {
if(channelLocalDebug->getLevel()>1)
if(channelLocalTrace->getLevel()>1)
{
std::cout << "ChannelProviderLocal::createChannel";
std::cout << "ChannelProviderLocal::removeChannel";
std::cout << " channelName " << channel->getChannelName() << std::endl;
}
channelList.erase(iter);
@@ -251,11 +256,11 @@ void ChannelProviderLocal::removeChannel(
}
}
void ChannelProviderLocal::createChannelLocalDebugRecord(
void ChannelProviderLocal::createChannelLocalTraceRecord(
String const &recordName)
{
ChannelLocalDebugRecordPtr pvRecord
= ChannelLocalDebugRecord::create(channelLocalDebug,recordName);
ChannelLocalTraceRecordPtr pvRecord
= ChannelLocalTraceRecord::create(channelLocalTrace,recordName);
PVDatabasePtr master = PVDatabase::getMaster();
bool result = master->addRecord(pvRecord);
if(!result) {