osaf/services/saf/amf/amfnd/susm.cc | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
amfnd crashes when comp instantiation fails as a part of comp restart recovery.
Applicable to a NPI SU only.
Crash occurs because AMFND is trying to respond to AMFD for assignment status.
If a healthy comp faults in stable state of SG with comp-restart or su-restart
recovery and it results in INST_FAILED state of SU, then there will be no
pending
assignments to AMFD. AMFND must inform to AMFD only when SU enters INST_FAILED
state
during handling of assignments sent by AMFD.
diff --git a/osaf/services/saf/amf/amfnd/susm.cc
b/osaf/services/saf/amf/amfnd/susm.cc
--- a/osaf/services/saf/amf/amfnd/susm.cc
+++ b/osaf/services/saf/amf/amfnd/susm.cc
@@ -1818,11 +1818,15 @@ uint32_t avnd_su_pres_st_chng_prc(AVND_C
if (((SA_AMF_PRESENCE_INSTANTIATING == prv_st) ||
(SA_AMF_PRESENCE_INSTANTIATED == prv_st)) &&
(SA_AMF_PRESENCE_INSTANTIATION_FAILED == final_st)) {
TRACE("SU Instantiating/Instantiated -> Instantiation
Failed");
- /* si-assignment failed .. inform avd */
- TRACE("SI-Assignment failed, Informing AVD");
- rc = avnd_di_susi_resp_send(cb, su, si);
- if (NCSCC_RC_SUCCESS != rc)
- goto done;
+ /*SU may fail with INST_FAILED state as a part of
recovery
+ like comp-restart and su-restart. Inform AMFD if
+ assignments are pending from AMFD.*/
+ if (m_AVND_SU_IS_ASSIGN_PEND(su)) {
+ TRACE("SI-Assignment failed, Informing AVD");
+ rc = avnd_di_susi_resp_send(cb, su, si);
+ if (NCSCC_RC_SUCCESS != rc)
+ goto done;
+ }
/* mark su as failed */
m_AVND_SU_FAILED_SET(su);
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel