Hello there ,
Issue is memory leak in RMC API C++
OS is Red Hat Enterprise Linux Server 7.9, RMC API is rmc2.2.0.L1.linux.
The question is how do I convert from "RTRProxyManagedVariable&" to "RTRProxyManagedVariablePtr"?
In bool Monitor::addToList( const RTRProxyManagedVariablePtr var )
I store the RTRProxyManagedVariablePtr in a standard c++ vector
In the function void dropFromList(const RTRProxyManagedVariable& var)
A reference to a RTRProxyManagedVariable is passed not RTRProxyManagedVariablePtr
I can't figure out how to convert from RTRProxyManagedVariable toa RTRProxyManagedVariablePtr so that I can find it in my list so that I can drop the variable.
I have attached the code segments below...
Global variable
vector <RTRProxyManagedVariablePtr *> vecVarPtr;
bool Monitor::addToList( const RTRProxyManagedVariablePtr var )
{
RTRProxyManagedVariablePtr varPtr;
RTRBOOL variable_found = RTRFALSE; //used to ensure that the variables added in the same order as we see them
RTRProxyManagedVariablePtr *nPtr = new RTRProxyManagedVariablePtr;
*nPtr = var;
if(vecVarPtr.size() == 0)
vecVarPtr.push_back(nPtr);
else
{
for(size_t ix=0; ix< vecVarPtr.size(); ix++)
{
varPtr = *(vecVarPtr[ix]);
if (varPtr->error())
{
if (varPtr->hasClient(*this))
varPtr->dropClient(*this);
vecVarPtr.erase(vecVarPtr.begin()+ix);
return false;
}
if ( var->context().instanceId() == varPtr->context().instanceId() )
variable_found = RTRTRUE;
if ( ( variable_found ) && (var->context().instanceId() != varPtr->context().instanceId()) )
{
vecVarPtr.push_back(nPtr);
break;
}
}
}
return true;
}
void Monitor::dropFromList(const RTRProxyManagedVariable& var)
{
for(size_t ix=0; ix< vecVarPtr.size(); ix++)
{
RTRProxyManagedVariablePtr *varPtr = vecVarPtr[ix];
if ((unsigned long)&(*(*varPtr)) == (unsigned long)(&var))
{
vecVarPtr.erase(vecVarPtr.begin()+ix);
delete varPtr;
break;
}
}
}