Ack, please push it. Thanks -Nagu > -----Original Message----- > From: Hans Nordeback [mailto:[email protected]] > Sent: 25 September 2015 14:39 > To: Praveen Malviya; Nagendra Kumar; [email protected] > Cc: [email protected] > Subject: [PATCH 1 of 1] amfd: segv in get_comp_capability [#1502] > > osaf/services/saf/amf/amfd/comp.cc | 2 +- > osaf/services/saf/amf/amfd/csi.cc | 6 +++--- > osaf/services/saf/amf/amfd/include/comp.h | 5 ++--- > osaf/services/saf/amf/amfd/include/csi.h | 2 +- > osaf/services/saf/amf/amfd/sgproc.cc | 24 ++++++++++++------------ > osaf/services/saf/amf/amfd/su.cc | 29 +++++++++++++++++++--------- > - > 6 files changed, 38 insertions(+), 30 deletions(-) > > > diff --git a/osaf/services/saf/amf/amfd/comp.cc > b/osaf/services/saf/amf/amfd/comp.cc > --- a/osaf/services/saf/amf/amfd/comp.cc > +++ b/osaf/services/saf/amf/amfd/comp.cc > @@ -75,7 +75,7 @@ void AVD_COMP::initialize() { > saAmfCompRestartCount = {}; > saAmfCompCurrProxyName = {}; > saAmfCompCurrProxiedNames = {}; > - assign_flag = {}; > + assign_flag = false; > comp_type = {}; > comp_type_list_comp_next = {}; > su = {}; > 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 > @@ -52,7 +52,7 @@ AVD_COMP* AVD_CSI::find_assigned_comp(co > } > } > if (iter == list_of_comp.end()) { > - return NULL; > + return nullptr; > } else { > return comp; > } > @@ -511,7 +511,7 @@ static SaAisErrorT csi_ccb_completed_cre > > compcsi = t_sisu->list_of_csicomp; > while (compcsi != NULL) { > - compcsi->comp->set_assigned(); > + compcsi->comp->set_assigned(true); > compcsi = compcsi- > >susi_csicomp_next; > } > > @@ -993,7 +993,7 @@ SaAisErrorT csi_assign_hdlr(AVD_CSI *csi > > compcsi = t_sisu->list_of_csicomp; > while (compcsi != NULL) { > - compcsi->comp->set_assigned(); > + compcsi->comp->set_assigned(true); > compcsi = compcsi->susi_csicomp_next; > } > > diff --git a/osaf/services/saf/amf/amfd/include/comp.h > b/osaf/services/saf/amf/amfd/include/comp.h > --- a/osaf/services/saf/amf/amfd/include/comp.h > +++ b/osaf/services/saf/amf/amfd/include/comp.h > @@ -123,9 +123,8 @@ class AVD_COMP { > AVD_SU *su; /* SU to which this component belongs */ > AVD_ADMIN_OPER_CBK admin_pend_cbk; /* holds callback invocation for > admin operation */ > > - void set_unassigned() {assign_flag = false;} > - void set_assigned() {assign_flag = true;} > - bool is_assigned() {return assign_flag;} > + void set_assigned(bool assigned) {assign_flag = assigned;} bool > + assigned() const {return assign_flag;} > private: > void initialize(); > // disallow copy and assign > diff --git a/osaf/services/saf/amf/amfd/include/csi.h > b/osaf/services/saf/amf/amfd/include/csi.h > --- a/osaf/services/saf/amf/amfd/include/csi.h > +++ b/osaf/services/saf/amf/amfd/include/csi.h > @@ -82,7 +82,7 @@ class AVD_CSI { > uint32_t compcsi_cnt {}; /* no of comp-csi rels */ > AVD_CSI *csi_list_cs_type_next {}; > AVD_CS_TYPE *cstype {}; > - bool assign_flag {}; /* Flag used while assigning. to mark this csi has > been > assigned a Comp > + bool assign_flag = false; /* Flag used while assigning. to mark this csi > has > been assigned a Comp > from * current SI being assigned */ > > static AVD_COMP* find_assigned_comp(const SaNameT *cstype, const > AVD_SU_SI_REL *sisu, const std::vector<AVD_COMP*> &list_of_comp); diff > --git a/osaf/services/saf/amf/amfd/sgproc.cc > b/osaf/services/saf/amf/amfd/sgproc.cc > --- a/osaf/services/saf/amf/amfd/sgproc.cc > +++ b/osaf/services/saf/amf/amfd/sgproc.cc > @@ -62,7 +62,7 @@ static void verify_csi_deps_and_delete_i > compcsi->comp- > >comp_info.name.value, > compcsi->csi- > >name.value); > compcsi->csi->assign_flag = false; > - compcsi->comp->set_unassigned(); > + compcsi->comp- > >set_assigned(false); > > avd_compcsi_from_csi_and_susi_delete(susi, compcsi, true); > //Delete compcsi of dependents. > > verify_csi_deps_and_delete_invalid_compcsi(susi); > @@ -134,7 +134,7 @@ uint32_t avd_new_assgn_susi(AVD_CL_CB *c > /* find a component that can be assigned this CSI */ > l_comp = su- > >find_unassigned_comp_that_provides_cstype(&l_csi->saAmfCSType); > > - if (l_comp == NULL) { > + if (l_comp == nullptr) { > /* This means either - 1. l_csi cann't be assigned to > any comp or 2. some comp got assigned > and the rest cann't be assigned.*/ > l_csi = l_csi->si_list_of_csi_next; > @@ -148,7 +148,7 @@ uint32_t avd_new_assgn_susi(AVD_CL_CB *c > continue; > } > > - l_comp->set_assigned(); > + l_comp->set_assigned(true); > l_csi->assign_flag = true; > l_csi = l_csi->si_list_of_csi_next; > } /* while(l_csi != AVD_CSI_NULL) */ > @@ -165,17 +165,17 @@ uint32_t avd_new_assgn_susi(AVD_CL_CB *c > Here, policy for assigning more than 1 csi to components is : Assign > to max to the deserving comps and then > assign the rest csi to others. We are taking advantage of Specs > defining implementation specific csi > assigiment.*/ > - TRACE("Now assiging more than one csi per comp"); > + TRACE("Now assigning more than one csi per comp"); > l_csi = si->list_of_csi; > while (NULL != l_csi) { > if (false == l_csi->assign_flag) { > /* Assign to only those comps, which have > assignment. Those comps, which could not have assignment > before, cann't find compcsi here also.*/ > - for (const auto& l_comp : su->list_of_comp) { > - AVD_COMP_TYPE *comptype = > comptype_db->find(Amf::to_string(&l_comp->saAmfCompType)); > + for (const auto& comp_ : su->list_of_comp) { > + AVD_COMP_TYPE *comptype = > +comptype_db->find(Amf::to_string(&comp_->saAmfCompType)); > osafassert(comptype); > - if ((true == l_comp->is_assigned()) && > (comptype->saAmfCtCompCategory != SA_AMF_COMP_LOCAL)) { > - if (NULL != (cst = > avd_compcstype_find_match(&l_csi->saAmfCSType, l_comp))) { > + if ((true == comp_->assigned()) && > (comptype->saAmfCtCompCategory != SA_AMF_COMP_LOCAL)) { > + if (NULL != (cst = > avd_compcstype_find_match(&l_csi->saAmfCSType, > +comp_))) { > if (SA_AMF_HA_ACTIVE == > ha_state) { > if (cst- > >saAmfCompNumCurrActiveCSIs < cst->saAmfCompNumMaxActiveCSIs) { > } else { /* We cann't > assign this csi to this comp, so check for another comp */ @@ -187,7 +187,7 > @@ uint32_t avd_new_assgn_susi(AVD_CL_CB *c > continue ; > } > } > - if ((compcsi = > avd_compcsi_create(susi, l_csi, l_comp, true)) == NULL) { > + if ((compcsi = > avd_compcsi_create(susi, l_csi, comp_, true)) == > +NULL) { > /* free all the CSI > assignments and end this loop */ > > avd_compcsi_delete(cb, susi, true); > continue; > @@ -195,9 +195,9 @@ uint32_t avd_new_assgn_susi(AVD_CL_CB *c > l_csi->assign_flag = true; > /* If one csi has been > assigned to a comp, then look for another csi. */ > break; > - }/* if (NULL != (cst = > avd_compcstype_find_match(&l_csi->saAmfCSType, l_comp))) */ > - }/* if (true == l_comp->assign_flag) */ > - }/* for (const auto& l_comp : su->list_of_comp) */ > + }/* if (NULL != (cst = > avd_compcstype_find_match(&l_csi->saAmfCSType, comp_))) */ > + }/* if (true == comp_->assigned()) */ > + }/* for (const auto& comp_ : su->list_of_comp) */ > }/* if (false == l_csi->assign_flag)*/ > l_csi = l_csi->si_list_of_csi_next; > }/* while (l_csi != NULL) */ > 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 > @@ -122,9 +122,13 @@ void AVD_SU::remove_comp(AVD_COMP *comp) > osafassert(su_ref != NULL); > > if (comp->su != nullptr) { > - comp->su->list_of_comp.erase(std::remove(comp->su- > >list_of_comp.begin(), > - comp->su->list_of_comp.end(), > comp), comp->su- > >list_of_comp.end()); > - } > + su_ref->list_of_comp.erase(std::remove(su_ref- > >list_of_comp.begin(), > + su_ref->list_of_comp.end(), > +comp), su_ref->list_of_comp.end()); > + > + /* Marking SU referance pointer to NULL, please dont use > further in the routine */ > + comp->su = nullptr; > + } > + > bool old_preinst_value = saAmfSUPreInstantiable; > bool curr_preinst_value = saAmfSUPreInstantiable; > > @@ -152,8 +156,8 @@ void AVD_SU::remove_comp(AVD_COMP *comp) } > > void AVD_SU::add_comp(AVD_COMP *comp) { > - comp->su->list_of_comp.push_back(comp); > - std::sort(comp->su->list_of_comp.begin(), comp->su- > >list_of_comp.end(), [] (const AVD_COMP *c1, const AVD_COMP *c2) -> > bool { > + list_of_comp.push_back(comp); > + std::sort(list_of_comp.begin(), list_of_comp.end(), [] (const > AVD_COMP > +*c1, const AVD_COMP *c2) -> bool { > if (c1->comp_info.inst_level < c2- > >comp_info.inst_level) return true; > if (c1->comp_info.inst_level == c2- > >comp_info.inst_level) { > if (m_CMP_HORDER_SANAMET(c1- > >comp_info.name, c2->comp_info.name) < 0) @@ -2011,7 +2015,7 @@ > void AVD_SU::set_saAmfSUPreInstantiable( > * resets the assign flag for all contained components > */ > void AVD_SU::reset_all_comps_assign_flag() { > - std::for_each(list_of_comp.begin(), list_of_comp.end(), > [](AVD_COMP *comp ) {comp->set_unassigned();}); > + std::for_each(list_of_comp.begin(), list_of_comp.end(), > [](AVD_COMP > +*comp ) {comp->set_assigned(false);}); > } > > /** > @@ -2021,22 +2025,27 @@ void AVD_SU::reset_all_comps_assign_flag > */ > AVD_COMP *AVD_SU::find_unassigned_comp_that_provides_cstype(const > SaNameT *cstype) { > AVD_COMP *l_comp = nullptr; > - for (const auto& comp : list_of_comp) { > - l_comp = comp; > + auto iter = list_of_comp.begin(); > + for (; iter != list_of_comp.end(); ++iter) { > + l_comp = *iter; > bool npi_is_assigned = false; > AVD_COMP_TYPE *comptype = comptype_db- > >find(Amf::to_string(&l_comp->saAmfCompType)); > osafassert(comptype); > if ((comptype->saAmfCtCompCategory == > SA_AMF_COMP_LOCAL) && is_comp_assigned_any_csi(l_comp)) > npi_is_assigned = true; > > - if ((l_comp->is_assigned() == false) && (npi_is_assigned == > false)) { > + if ((l_comp->assigned() == false) && (npi_is_assigned == > false)) { > AVD_COMPCS_TYPE *cst = > avd_compcstype_find_match(cstype, l_comp); > if (cst != NULL) > break; > } > } > > - return l_comp; > + if (iter == list_of_comp.end()) { > + return nullptr; > + } else { > + return l_comp; > + } > } > > /**
------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
