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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel