osaf/services/saf/immsv/immnd/ImmModel.cc | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
If the NO_DANGLING reference is modified(removed) in the same CCB,
then deletion of the NO_DANGLING object can be allowed because, we
are in apply and the CCBcommit will modify sReverseRefsNoDanglingMMap.
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -5050,6 +5050,26 @@ bool ImmModel::validateNoDanglingRefsDel
if(!(ommi->second->mObjFlags & IMM_DELETE_LOCK)) {
std::string objName;
getObjectName(ommi->second, objName);
+ if(ommi->second->mObjFlags & IMM_NO_DANGLING_FLAG){ //
IMM_NO_DANGLING_FLAG will be set in CcbModify
+ /* If the NO_DANGLING reference is modified(removed) in the
same CCB,
+ then deletion of the NO_DANGLING object can be allowed
because, we are in apply
+ and the CCBcommit will modify sReverseRefsNoDanglingMMap*/
+ ObjectMutationMap::iterator omit =
ccb->mMutations.find(objName);
+ if(omit != ccb->mMutations.end()){
+ ObjectInfo * afim = omit->second->mAfterImage;
+ AttrMap::iterator amit;
+ for(amit=afim->mClassInfo->mAttrMap.begin();
amit!=afim->mClassInfo->mAttrMap.end(); ++amit){
+ if(amit->second->mFlags & SA_IMM_ATTR_NO_DANGLING){
+ break;
+ }
+ }
+ ImmAttrValueMap::iterator afim_amit =
afim->mAttrValueMap.find(amit->first.c_str());
+ if(afim_amit->second->empty()){ //CcbModify operation
cleared the NO_DANGLING attribute value.
+ break;
+ }
+ }
+ }
+
LOG_WA("ERR_FAILED_OPERATION: Delete of object %s would violate
NO_DANGLING reference "
"from object %s, not scheduled for delete by this Ccb:%u",
omit->first.c_str(), objName.c_str(), ccb->mId);
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel