osaf/services/saf/amf/amfd/csi.cc       |  25 ++++++++++++++++++++-----
 osaf/services/saf/amf/amfd/include/sg.h |   1 -
 osaf/services/saf/amf/amfd/sgtype.cc    |   3 ++-
 osaf/services/saf/amf/amfd/si.cc        |  27 +++++++++++++++++++++++++--
 osaf/services/saf/amf/amfd/svctype.cc   |  20 ++++++++++++++++++++
 osaf/services/saf/amf/amfd/util.cc      |   4 ++--
 6 files changed, 69 insertions(+), 11 deletions(-)


  be a typo of saAmfSGtValidSuTypes
* ensure saAmfCSIDependencies is deleted in csi.cc
* ensure saAmfSIActiveWeight, saAmfSIStandbyWeight, saAmfSvcDefActiveWeight and
  saAmfSvcDefStandbyWeight are deleted in si.cc
* fix a few typos where delete is called when delete [] is required

diff --git a/osaf/services/saf/amf/amfd/csi.cc 
b/osaf/services/saf/amf/amfd/csi.cc
--- a/osaf/services/saf/amf/amfd/csi.cc
+++ b/osaf/services/saf/amf/amfd/csi.cc
@@ -44,6 +44,19 @@
 
        rc = ncs_patricia_tree_del(&csi_db, &csi->tree_node);
        osafassert(rc == NCSCC_RC_SUCCESS);
+       
+       if (csi->saAmfCSIDependencies) {
+               AVD_CSI_DEPS *csi_dep;
+               AVD_CSI_DEPS *next_csi_dep;
+               
+               csi_dep = csi->saAmfCSIDependencies;
+               while (csi_dep != NULL) {
+                       next_csi_dep = csi_dep->csi_dep_next;
+                       delete csi_dep;
+                       csi_dep = next_csi_dep;
+               }
+       }
+
        delete csi;
        TRACE_LEAVE2();
 }
@@ -295,21 +308,23 @@
                } else {
                        /* Dependency Configured. Decide rank when adding it in 
si list.*/
                        unsigned int i;
-                       bool found = false;
+                       bool found;
                        AVD_CSI_DEPS *new_csi_dep = NULL;
 
                        for (i = 0; i < values_number; i++) {
-                               if (!found)
-                                       new_csi_dep  =  new AVD_CSI_DEPS();
+                               new_csi_dep = new AVD_CSI_DEPS();
                                if 
(immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCSIDependencies"), 
attributes, i,
                                        &new_csi_dep->csi_dep_name_value) != 
SA_AIS_OK) {
                                        LOG_ER("Get saAmfCSIDependencies FAILED 
for '%s'", csi->name.value);
+                                       // make sure we don't leak any memory if
+                                       // saAmfCSIDependencies can't be read
+                                       delete new_csi_dep;
                                        goto done;
                                }
                                found = csi_add_csidep(csi,new_csi_dep);
+                               if (found == true)
+                                       delete new_csi_dep;
                        }
-                       if (found == true)
-                               free (new_csi_dep);
                }
        } else {
                csi->rank = 1;
diff --git a/osaf/services/saf/amf/amfd/include/sg.h 
b/osaf/services/saf/amf/amfd/include/sg.h
--- a/osaf/services/saf/amf/amfd/include/sg.h
+++ b/osaf/services/saf/amf/amfd/include/sg.h
@@ -247,7 +247,6 @@
    /******************** B.04 model 
*************************************************/
        SaNameT *saAmfSGtValidSuTypes;  /* array of DNs, size in number_su_type 
*/
        SaAmfRedundancyModelT saAmfSgtRedundancyModel;
-       SaNameT *saAmfStgValidSuTypes;
        SaBoolT saAmfSgtDefAutoRepair;
        SaBoolT saAmfSgtDefAutoAdjust;
        SaTimeT saAmfSgtDefAutoAdjustProb;
diff --git a/osaf/services/saf/amf/amfd/sgtype.cc 
b/osaf/services/saf/amf/amfd/sgtype.cc
--- a/osaf/services/saf/amf/amfd/sgtype.cc
+++ b/osaf/services/saf/amf/amfd/sgtype.cc
@@ -77,7 +77,7 @@
 static void sgtype_delete(AVD_AMF_SG_TYPE *sg_type)
 {
        (void)ncs_patricia_tree_del(&sgtype_db, &sg_type->tree_node);
-       delete sg_type->saAmfStgValidSuTypes;
+       delete [] sg_type->saAmfSGtValidSuTypes;
        delete sg_type;
 }
 
@@ -257,6 +257,7 @@
 
  done:
        if (rc != 0) {
+               delete [] sgt->saAmfSGtValidSuTypes;
                delete sgt;
                sgt = NULL;
        }
diff --git a/osaf/services/saf/amf/amfd/si.cc b/osaf/services/saf/amf/amfd/si.cc
--- a/osaf/services/saf/amf/amfd/si.cc
+++ b/osaf/services/saf/amf/amfd/si.cc
@@ -338,6 +338,8 @@
        si->alarm_sent = false;
        si->num_dependents = 0;
        si->tol_timer_count = 0;
+       si->saAmfSIActiveWeight = NULL;
+       si->saAmfSIStandbyWeight = NULL;
 
        return si;
 }
@@ -377,6 +379,25 @@
        avd_sg_remove_si(si->sg_of_si, si);
        rc = ncs_patricia_tree_del(&si_db, &si->tree_node);
        osafassert(rc == NCSCC_RC_SUCCESS);
+       
+       if (si->saAmfSIActiveWeight) {
+               unsigned int i = 0;
+               while (si->saAmfSIActiveWeight[i] != NULL) {
+                       delete [] si->saAmfSIActiveWeight[i];
+                       ++i;
+               }
+               delete [] si->saAmfSIActiveWeight;
+       }
+       
+       if (si->saAmfSIStandbyWeight) {
+               unsigned int i = 0;
+               while (si->saAmfSIStandbyWeight[i] != NULL) {
+                       delete [] si->saAmfSIStandbyWeight[i];
+                       ++i;
+               }
+               delete [] si->saAmfSIStandbyWeight;     
+       }
+       
        delete si;
 }
 /**
@@ -595,22 +616,24 @@
 
        /* Optional, [0..*] */
        if 
(immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfSIActiveWeight"), 
attributes, &attrValuesNumber) == SA_AIS_OK) {
-               si->saAmfSIActiveWeight = new char*[attrValuesNumber];
+               si->saAmfSIActiveWeight = new char*[attrValuesNumber + 1];
                for (i = 0; i < attrValuesNumber; i++) {
                        si->saAmfSIActiveWeight[i] =
                            StrDup(immutil_getStringAttr(attributes, 
"saAmfSIActiveWeight", i));
                }
+               si->saAmfSIActiveWeight[i] = NULL;
        } else {
                /*  TODO */
        }
 
        /* Optional, [0..*] */
        if 
(immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfSIStandbyWeight"),
 attributes, &attrValuesNumber) == SA_AIS_OK) {
-               si->saAmfSIStandbyWeight = new char*[attrValuesNumber];
+               si->saAmfSIStandbyWeight = new char*[attrValuesNumber + 1];
                for (i = 0; i < attrValuesNumber; i++) {
                        si->saAmfSIStandbyWeight[i] =
                            StrDup(immutil_getStringAttr(attributes, 
"saAmfSIStandbyWeight", i));
                }
+               si->saAmfSIStandbyWeight[i] = NULL;
        } else {
                /*  TODO */
        }
diff --git a/osaf/services/saf/amf/amfd/svctype.cc 
b/osaf/services/saf/amf/amfd/svctype.cc
--- a/osaf/services/saf/amf/amfd/svctype.cc
+++ b/osaf/services/saf/amf/amfd/svctype.cc
@@ -61,6 +61,24 @@
 {
        unsigned int rc = ncs_patricia_tree_del(&svctype_db, 
&svc_type->tree_node);
        osafassert(rc == NCSCC_RC_SUCCESS);
+
+       if (svc_type->saAmfSvcDefActiveWeight != NULL) {
+               unsigned int i = 0;
+               while (svc_type->saAmfSvcDefActiveWeight[i] != NULL) {
+                       delete [] svc_type->saAmfSvcDefActiveWeight[i];
+                       ++i;
+               }
+               delete [] svc_type->saAmfSvcDefActiveWeight;
+       }
+
+       if (svc_type->saAmfSvcDefStandbyWeight != NULL) {
+               unsigned int i = 0;
+               while (svc_type->saAmfSvcDefStandbyWeight[i] != NULL) {
+                       delete [] svc_type->saAmfSvcDefStandbyWeight[i];
+                       ++i;
+               }
+               delete [] svc_type->saAmfSvcDefStandbyWeight;
+       }
        delete svc_type;
 }
 
@@ -77,6 +95,8 @@
        memcpy(svct->name.value, dn->value, dn->length);
        svct->name.length = dn->length;
        svct->tree_node.key_info = (uint8_t *)&svct->name;
+       svct->saAmfSvcDefActiveWeight = NULL;
+       svct->saAmfSvcDefStandbyWeight = NULL;
 
        /* Optional, [0..*] */
        if 
(immutil_getAttrValuesNumber(const_cast<SaImmAttrNameT>("saAmfSvcDefActiveWeight"),
 attributes, &attrValuesNumber) == SA_AIS_OK) {
diff --git a/osaf/services/saf/amf/amfd/util.cc 
b/osaf/services/saf/amf/amfd/util.cc
--- a/osaf/services/saf/amf/amfd/util.cc
+++ b/osaf/services/saf/amf/amfd/util.cc
@@ -1655,7 +1655,7 @@
                compcsi_info = susi_msg->msg_info.d2n_su_si_assign.list;
                susi_msg->msg_info.d2n_su_si_assign.list = compcsi_info->next;
                if (compcsi_info->attrs.list != NULL) {
-                       delete(compcsi_info->attrs.list);
+                       delete [] (compcsi_info->attrs.list);
                        compcsi_info->attrs.list = NULL;
                }
                delete compcsi_info;
@@ -1681,7 +1681,7 @@
        AVSV_D2N_PG_TRACK_ACT_RSP_MSG_INFO *info = 
&pg_msg->msg_info.d2n_pg_track_act_rsp;
 
        if (info->mem_list.numberOfItems)
-               delete info->mem_list.notification;
+               delete [] info->mem_list.notification;
 
        info->mem_list.notification = 0;
        info->mem_list.numberOfItems = 0;

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to