also address issue 35

This commit is contained in:
mrkraimer
2018-05-24 10:21:28 -04:00
parent 87ccf78a9b
commit 6239ef0c0c
7 changed files with 464 additions and 350 deletions

View File

@@ -21,21 +21,37 @@ using namespace std;
namespace epics { namespace pvDatabase {
#define DEBUG_LEVEL 0
static PVDatabasePtr pvDatabaseMaster;
bool PVDatabase::getMasterFirstCall = true;
PVDatabasePtr PVDatabase::getMaster()
{
if(!pvDatabaseMaster) pvDatabaseMaster = PVDatabasePtr(new PVDatabase());
if(getMasterFirstCall) {
getMasterFirstCall = false;
pvDatabaseMaster = PVDatabasePtr(new PVDatabase());
}
return pvDatabaseMaster;
}
PVDatabase::PVDatabase()
{
if(DEBUG_LEVEL>0) cout << "PVDatabase::PVDatabase()\n";
}
PVDatabase::~PVDatabase()
{
cout << "PVDatabase::~PVDatabase()\n";
if(DEBUG_LEVEL>0) cout << "PVDatabase::~PVDatabase()\n";
size_t len = recordMap.size();
shared_vector<string> names(len);
PVRecordMap::iterator iter;
size_t i = 0;
for(iter = recordMap.begin(); iter!=recordMap.end(); ++iter) {
names[i++] = (*iter).first;
}
for(size_t i=0; i<len; ++i) removeRecord(findRecord(names[i]));
}
void PVDatabase::lock() {
@@ -83,7 +99,6 @@ bool PVDatabase::removeRecord(PVRecordPtr const & record)
if(iter!=recordMap.end()) {
PVRecordPtr pvRecord = (*iter).second;
recordMap.erase(iter);
if(pvRecord) pvRecord->destroy();
return true;
}
return false;