During controller goes up, it creats config object from IMM. In case the object was deleted but comming up amfd still receives ccb object delete callback. And it validates and crash due to access to null pointer. --- src/amf/amfd/imm.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/src/amf/amfd/imm.cc b/src/amf/amfd/imm.cc index d917b0d..8b84432 100644 --- a/src/amf/amfd/imm.cc +++ b/src/amf/amfd/imm.cc @@ -1044,17 +1044,28 @@ static SaAisErrorT ccb_object_delete_cb(SaImmOiHandleT immoi_handle, const SaNameT *object_name) { SaAisErrorT rc = SA_AIS_OK; struct CcbUtilCcbData *ccb_util_ccb_data; - char err_str[] = "Ccb delete failed, m/w role switch going on"; + char *err_str[2] = + {const_cast<char*>("Ccb delete failed, m/w role switch going on"), + const_cast<char*>("Ccb delete failed, node is stb and not cold sync")}; TRACE_ENTER2("CCB ID %llu, %s", ccb_id, osaf_extended_name_borrow(object_name)); /* Reject adm ops if we are in the middle of a role switch. */ - if (avd_cb->swap_switch == SA_TRUE) { + // Or if data has not been synced yet + if ((avd_cb->swap_switch == SA_TRUE) || + ((avd_cb->stby_sync_state != AVD_STBY_IN_SYNC) && + (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE))) { rc = SA_AIS_ERR_TRY_AGAIN; - saflog(LOG_NOTICE, amfSvcUsrName, "CCB %llu validation error: %s", ccb_id, - err_str); - (void)saImmOiCcbSetErrorString(avd_cb->immOiHandle, ccb_id, err_str); + if (avd_cb->swap_switch == SA_TRUE) { + saflog(LOG_NOTICE, amfSvcUsrName, "CCB %llu validation error: %s", ccb_id, + err_str[0]); + (void)saImmOiCcbSetErrorString(avd_cb->immOiHandle, ccb_id, err_str[0]); + } else { + saflog(LOG_NOTICE, amfSvcUsrName, "CCB %llu validation error: %s", ccb_id, + err_str[1]); + (void)saImmOiCcbSetErrorString(avd_cb->immOiHandle, ccb_id, err_str[1]); + } goto done; } -- 2.7.4 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel