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

Reply via email to