osaf/services/saf/immsv/immloadd/imm_loader.cc | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
Fix memory leak in immload in functions createImmObject and createImmClass
diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.cc
b/osaf/services/saf/immsv/immloadd/imm_loader.cc
--- a/osaf/services/saf/immsv/immloadd/imm_loader.cc
+++ b/osaf/services/saf/immsv/immloadd/imm_loader.cc
@@ -489,6 +489,7 @@ bool createImmObject(SaImmClassNameT cla
SaAisErrorT errorCode = SA_AIS_OK;
int i;
size_t RDNlen;
+ bool rc = true;
TRACE_ENTER2("CREATE IMM OBJECT %s, %s", className, objectName);
@@ -591,8 +592,8 @@ bool createImmObject(SaImmClassNameT cla
LOG_ER("Failed to create object err: %d, class: %s, dn: '%s'. "
"Check for duplicate attributes, or trace osafimmloadd",
errorCode, className, objectName);
- TRACE_LEAVE();
- return false;
+ rc = false;
+ goto freemem;
}
if(!opensafObjectCreated &&
@@ -603,13 +604,8 @@ bool createImmObject(SaImmClassNameT cla
TRACE_8("CREATE DONE");
- /* Free used parameters - moved to endElementHandler
- free(state->objectClass);
- state->objectClass = NULL;
- free(state->objectName);
- state->objectName = NULL;
- */
-
+
+freemem:
/* Free the RDN attrName later since it's re-used */
/*free(attrValues[i]->attrValues);*/
free(attrValues[i]);
@@ -623,7 +619,10 @@ bool createImmObject(SaImmClassNameT cla
free(it->attrValues);
}
attrValuesList->clear();
- return true;
+
+ TRACE_LEAVE();
+
+ return rc;
}
/**
@@ -637,6 +636,7 @@ bool createImmClass(SaImmHandleT immHand
SaImmAttrDefinitionT_2** attrDefinition;
SaAisErrorT errorCode = SA_AIS_OK;
int i;
+ bool rc = true;
TRACE_ENTER2("CREATING IMM CLASS %s", className);
@@ -681,7 +681,8 @@ bool createImmClass(SaImmHandleT immHand
if (SA_AIS_OK != errorCode)
{
LOG_ER("FAILED to create IMM class %s, err:%d", className, errorCode);
- return false;
+ rc = false;
+ goto freemem;
}
if(!opensafClassCreated &&
@@ -698,6 +699,7 @@ bool createImmClass(SaImmHandleT immHand
TRACE_8("CREATED IMM CLASS %s", className);
+freemem:
/* Free each attrDefinition */
it = attrDefinitions->begin();
@@ -718,7 +720,7 @@ bool createImmClass(SaImmHandleT immHand
attrDefinitions->clear();
TRACE_LEAVE();
- return true;
+ return rc;
}
/**
------------------------------------------------------------------------------
Slashdot TV. Video for Nerds. Stuff that Matters.
http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel