osaf/services/saf/amf/amfd/include/su.h | 22 +++----- osaf/services/saf/amf/amfd/su.cc | 80 +++++++++++++++----------------- 2 files changed, 46 insertions(+), 56 deletions(-)
diff --git a/osaf/services/saf/amf/amfd/include/su.h b/osaf/services/saf/amf/amfd/include/su.h --- a/osaf/services/saf/amf/amfd/include/su.h +++ b/osaf/services/saf/amf/amfd/include/su.h @@ -92,6 +92,9 @@ class AVD_SU { struct avd_sutype *su_type; AVD_SU *su_list_su_type_next; + AVD_SU() {}; + AVD_SU(const SaNameT *dn); + ~AVD_SU() {}; void set_su_failover(bool value); void dec_curr_stdby_si(); void inc_curr_stdby_si(); @@ -111,9 +114,14 @@ class AVD_SU { void set_all_susis_assigned_quiesced(void); void set_all_susis_assigned(void); void set_term_state(bool state); + void remove_from_model(); private: void send_attribute_update(AVSV_AMF_SU_ATTR_ID attrib_id); + + // disallow copy and assign, TODO add common macro for this + AVD_SU(const AVD_SU&); + void operator=(const AVD_SU&); }; extern AmfDb<AVD_SU> *su_db; @@ -146,20 +154,6 @@ m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su, else su_node_ptr = i_su->su_on_node; /** - * Allocate SU memory and initialize attributes to defaults - * @param dn - * - * @return AVD_SU* - */ -extern AVD_SU *avd_su_new(const SaNameT *dn); - -/** - * Free SU memory - * @param su - */ -extern void avd_su_delete(AVD_SU *su); - -/** * Get SUs from IMM and create internal objects * * @return SaAisErrorT 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 @@ -31,51 +31,46 @@ AmfDb<AVD_SU> *su_db = NULL; -AVD_SU *avd_su_new(const SaNameT *dn) -{ - SaNameT sg_name; - AVD_SU *su; - - su = new AVD_SU(); - - memcpy(su->name.value, dn->value, dn->length); - su->name.length = dn->length; - avsv_sanamet_init(dn, &sg_name, "safSg"); - su->saAmfSUFailover = false; - su->term_state = false; - su->su_switch = AVSV_SI_TOGGLE_STABLE; - su->saAmfSUPreInstantiable = static_cast<SaBoolT>(false); - /* saAmfSUOperState is set when the SU is added to model depending on - * node state. Initialized to invalid due to filtering in avd_su_oper_state_set. */ - su->saAmfSUOperState = static_cast<SaAmfOperationalStateT>(0); - su->saAmfSUPresenceState = SA_AMF_PRESENCE_UNINSTANTIATED; - su->saAmfSuReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE; - su->su_is_external = false; - - return su; +AVD_SU::AVD_SU(const SaNameT *dn) { + memcpy(name.value, dn->value, sizeof(name.value)); + name.length = dn->length; + saAmfSUFailover = false; + term_state = false; + su_switch = AVSV_SI_TOGGLE_STABLE; + saAmfSUPreInstantiable = static_cast<SaBoolT>(false); + saAmfSUOperState = SA_AMF_OPERATIONAL_DISABLED; + saAmfSUPresenceState = SA_AMF_PRESENCE_UNINSTANTIATED; + saAmfSuReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE; + su_is_external = false; + sg_of_su = NULL; + su_on_node = NULL; + list_of_susi = NULL; + list_of_comp = NULL; + sg_list_su_next = NULL; + avnd_list_su_next = NULL; + su_type = NULL; + su_list_su_type_next = NULL; + saAmfSUHostedByNode.length = 0; } /** * Delete the SU from the model. Check point with peer. Send delete order - * to node director. Delete all contained components. - * - * @param i_su + * to node director. */ -void avd_su_delete(AVD_SU *su) -{ - TRACE_ENTER2("'%s'", su->name.value); - +void AVD_SU::remove_from_model() { + TRACE_ENTER2("'%s'", name.value); + /* All the components under this SU should have been deleted * by now, just do the sanity check to confirm it is done */ - osafassert(su->list_of_comp == NULL); + osafassert(list_of_comp == NULL); + osafassert(list_of_susi == NULL); - m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, su, AVSV_CKPT_AVD_SU_CONFIG); - avd_node_remove_su(su); - avd_sutype_remove_su(su); - su_db->erase(su); - avd_sg_remove_su(su); - delete su; + m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, this, AVSV_CKPT_AVD_SU_CONFIG); + avd_node_remove_su(this); + avd_sutype_remove_su(this); + su_db->erase(this); + avd_sg_remove_su(this); TRACE_LEAVE(); } @@ -93,8 +88,7 @@ AVD_SU *avd_su_get_or_create(const SaNam if (su == NULL) { TRACE("'%s' does not exist, creating it", dn->value); - su = avd_su_new(dn); - osafassert(su != NULL); + su = new AVD_SU(dn); unsigned int rc = su_db->insert(su); osafassert(rc == NCSCC_RC_SUCCESS); } @@ -420,8 +414,7 @@ static AVD_SU *su_create(const SaNameT * ** but needs to get configuration attributes initialized. */ if ((su = su_db->find(dn)) == NULL) { - if ((su = avd_su_new(dn)) == NULL) - goto done; + su = new AVD_SU(dn); } else TRACE("already created, refreshing config..."); @@ -1489,7 +1482,8 @@ static void su_ccb_apply_delete_hdlr(str TRACE_ENTER2("'%s'", su->name.value); if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) { - avd_su_delete(su); + su->remove_from_model(); + delete su; goto done; } @@ -1505,7 +1499,9 @@ static void su_ccb_apply_delete_hdlr(str avd_snd_op_req_msg(avd_cb, su_node_ptr, ¶m); } - avd_su_delete(su); + su->remove_from_model(); + delete su; + if (AVD_SG_FSM_STABLE == sg->sg_fsm_state) { /*if su of uneqal rank has been delete and all SUs are of same rank then do screening for SI Distribution. */ ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available. Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel