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; } } }