This commit is contained in:
mrkraimer
2017-12-23 06:35:23 -05:00
parent c4fe7150c9
commit d3ce104c33
4 changed files with 94 additions and 23 deletions

View File

@@ -374,7 +374,8 @@ CAChannel::CAChannel(std::string const & _channelName,
channelRequester(_channelRequester),
channelID(0),
channelType(0),
elementCount(0)
elementCount(0),
channelCreated(false)
{
if(DEBUG_LEVEL>0) {
cout<< "CAChannel::CAChannel " << channelName << endl;
@@ -395,6 +396,9 @@ void CAChannel::activate(short priority)
&channelID);
if (result == ECA_NORMAL)
{
channelCreated = true;
CAChannelProviderPtr provider(channelProvider.lock());
if(provider) provider->addChannel(shared_from_this());
req->channelCreated(Status::Ok, shared_from_this());
} else {
Status errorStatus(Status::STATUSTYPE_ERROR, string(ca_message(result)));
@@ -402,6 +406,36 @@ void CAChannel::activate(short priority)
}
}
CAChannel::~CAChannel()
{
if(DEBUG_LEVEL>0) {
cout << "CAChannel::~CAChannel() " << channelName << endl;
}
disconnectChannel();
}
void CAChannel::disconnectChannel()
{
if(DEBUG_LEVEL>0) {
cout << "CAChannel::disconnectChannel() "
<< channelName
<< " channelCreated " << (channelCreated ? "true" : "false")
<< endl;
}
bool disconnect = true;
{
Lock lock(requestsMutex);
if(!channelCreated) disconnect = false;
channelCreated = false;
}
if(!disconnect) return;
/* Clear CA Channel */
threadAttach();
ca_clear_channel(channelID);
}
void CAChannel::addChannelGet(const CAChannelGetPtr & get)
{
if(DEBUG_LEVEL>0) {
@@ -448,17 +482,6 @@ void CAChannel::addChannelMonitor(const CAChannelMonitorPtr & monitor)
monitorList.push_back(monitor);
}
CAChannel::~CAChannel()
{
if(DEBUG_LEVEL>0) {
cout << "CAChannel::~CAChannel() " << channelName << endl;
}
/* Clear CA Channel */
threadAttach();
ca_clear_channel(channelID);
}
chid CAChannel::getChannelID()
{
return channelID;