osaf/libs/common/cpsv/include/cpnd_sec.h | 3 +++ osaf/services/saf/cpsv/cpnd/cpnd_db.c | 4 +++- osaf/services/saf/cpsv/cpnd/cpnd_sec.cc | 31 +++++++++++++++++++++++++++---- 3 files changed, 33 insertions(+), 5 deletions(-)
problem: the steps to add a section is add_db_tree -> update_sec_hdr -> update_ckpt_hdr so if an error occur cpsv should handle error in reverse order. currently, section_hdr_update_fails, cpsv revert ckpt_hdr also that case error solution: only revert db_tree in case section_hdr_update_fails diff --git a/osaf/libs/common/cpsv/include/cpnd_sec.h b/osaf/libs/common/cpsv/include/cpnd_sec.h --- a/osaf/libs/common/cpsv/include/cpnd_sec.h +++ b/osaf/libs/common/cpsv/include/cpnd_sec.h @@ -39,6 +39,9 @@ CPND_CKPT_SECTION_INFO * cpnd_ckpt_sec_get_create(const CPND_CKPT_NODE *, const SaCkptSectionIdT *); CPND_CKPT_SECTION_INFO * +cpnd_ckpt_sec_del_db(CPND_CKPT_NODE *, SaCkptSectionIdT *); + +CPND_CKPT_SECTION_INFO * cpnd_ckpt_sec_del(CPND_CKPT_NODE *, SaCkptSectionIdT *); CPND_CKPT_SECTION_INFO * diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_db.c b/osaf/services/saf/cpsv/cpnd/cpnd_db.c --- a/osaf/services/saf/cpsv/cpnd/cpnd_db.c +++ b/osaf/services/saf/cpsv/cpnd/cpnd_db.c @@ -468,10 +468,12 @@ CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_ad TRACE_LEAVE(); return pSecPtr; - section_hdr_update_fails: ckpt_hdr_update_fails: cpnd_ckpt_sec_del(cp_node, id); + section_hdr_update_fails: + cpnd_ckpt_sec_del_db(cp_node, id); + section_add_fails: if (pSecPtr->sec_id.id != NULL) m_MMGR_FREE_CPND_DEFAULT(pSecPtr->sec_id.id); diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc b/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc --- a/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc +++ b/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc @@ -157,19 +157,19 @@ cpnd_ckpt_sec_find(const CPND_CKPT_NODE } /**************************************************************************** - * Name : cpnd_ckpt_sec_del + * Name : cpnd_ckpt_sec_del_db * - * Description : Function to remove the section from a checkpoint. + * Description : Function to remove the section from a checkpoint map db. * * Arguments : CPND_CKPT_NODE *cp_node - Check point node. * : SaCkptSectionIdT id - Section Identifier - * + * * Return Values : ptr to CPND_CKPT_SECTION_INFO/NULL; * * Notes : None. *****************************************************************************/ CPND_CKPT_SECTION_INFO * -cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id) +cpnd_ckpt_sec_del_db(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id) { CPND_CKPT_SECTION_INFO *sectionInfo(0); @@ -206,6 +206,29 @@ cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_nod osafassert(false); } + TRACE_LEAVE(); + + return sectionInfo; +} + +/**************************************************************************** + * Name : cpnd_ckpt_sec_del + * + * Description : Function to remove the section from a checkpoint. + * + * Arguments : CPND_CKPT_NODE *cp_node - Check point node. + * : SaCkptSectionIdT id - Section Identifier + * + * Return Values : ptr to CPND_CKPT_SECTION_INFO/NULL; + * + * Notes : None. + *****************************************************************************/ +CPND_CKPT_SECTION_INFO * +cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id) +{ + TRACE_ENTER(); + CPND_CKPT_SECTION_INFO *sectionInfo = cpnd_ckpt_sec_del_db(cp_node, id); + if (sectionInfo) { cp_node->replica_info.n_secs--; cp_node->replica_info.mem_used = cp_node->replica_info.mem_used - (sectionInfo->sec_size); ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel