osaf/services/saf/amf/amfd/nodegroup.cc |  10 ++++++++++
 osaf/services/saf/amf/amfd/su.cc        |  12 +++++++++++-
 2 files changed, 21 insertions(+), 1 deletions(-)


Note: This patch is work of Hans N and it is for the crash given in the 
description of
ticket #1766.

When running SMF tests that creates and deletes nodegrups,
the nodegroup_db sometimes do not contain the nodegroup given in
parameter opdata->objectName.

diff --git a/osaf/services/saf/amf/amfd/nodegroup.cc 
b/osaf/services/saf/amf/amfd/nodegroup.cc
--- a/osaf/services/saf/amf/amfd/nodegroup.cc
+++ b/osaf/services/saf/amf/amfd/nodegroup.cc
@@ -453,6 +453,11 @@ static SaAisErrorT ng_ccb_completed_dele
        AVD_AVND *node;
        AVD_AMF_NG *ng = avd_ng_get(&opdata->objectName);
 
+        if (ng == nullptr) {
+          LOG_WA("Could not find %s in nodegroup_db", 
opdata->objectName.value);
+          return SA_AIS_OK;
+        }
+
        TRACE_ENTER2("%u", ng->number_nodes());
        std::set<std::string>::const_iterator iter;
        if ((ng->saAmfNGAdminState != SA_AMF_ADMIN_LOCKED) &&
@@ -581,6 +586,11 @@ static void ng_ccb_apply_delete_hdlr(Ccb
 {
        TRACE_ENTER();
        AVD_AMF_NG *ng = avd_ng_get(&opdata->objectName);
+       if (ng == nullptr) {
+               LOG_WA("Could not find %s in nodegroup_db", 
opdata->objectName.value);
+               return;
+       }
+
        SaAmfAdminStateT old_admin_state = ng->saAmfNGAdminState;
        if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) {
                //Since AMF will delete NG, clear its pointers in node.
diff --git a/osaf/services/saf/amf/amfd/su.cc b/osaf/services/saf/amf/amfd/su.cc
--- a/osaf/services/saf/amf/amfd/su.cc
+++ b/osaf/services/saf/amf/amfd/su.cc
@@ -457,6 +457,10 @@ static AVD_AVND *map_su_to_node(AVD_SU *
        /* If node is configured in SU we are done */
        if (strstr((char *)su->saAmfSUHostNodeOrNodeGroup.value, "safAmfNode=") 
!= nullptr) {
                node = avd_node_get(&su->saAmfSUHostNodeOrNodeGroup);
+               if (node == nullptr) {
+                       LOG_WA("Could not find: %s in su: %s", 
su->saAmfSUHostNodeOrNodeGroup.value, su->name.value);
+                       return node;
+               }
                goto done;
        }
 
@@ -495,7 +499,13 @@ static AVD_AVND *map_su_to_node(AVD_SU *
        }
 
        /* All nodes already have an SU mapped for the SG. Return a node in the 
node group. */
-       node = avd_node_get(*ng->saAmfNGNodeList.begin());
+        node_iter = ng->saAmfNGNodeList.begin();
+        if (node_iter != ng->saAmfNGNodeList.end()) {
+               node = avd_node_get(*ng->saAmfNGNodeList.begin());
+        } else {
+               LOG_WA("%s is empty", su->saAmfSUHostNodeOrNodeGroup.value);
+               return nullptr;
+       }
 done:
        memcpy(&su->saAmfSUHostedByNode, &node->name, sizeof(SaNameT));
        TRACE_LEAVE2("hosted by %s", node->name.value);

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to