Hi Hung, Reviewed and tested the patch. Ack from me.
Thanks, Zoran -----Original Message----- From: Hung Nguyen [mailto:hung.d.ngu...@dektech.com.au] Sent: Friday, June 17, 2016 6:34 AM To: Zoran Milinkovic <zoran.milinko...@ericsson.com>; reddy.neelaka...@oracle.com Cc: opensaf-devel@lists.sourceforge.net Subject: [PATCH 3 of 3] imm: Remove ccbsToGc in ::cleanTheBasement [#1881] osaf/services/saf/immsv/immnd/ImmModel.cc | 20 ++++++-------------- 1 files changed, 6 insertions(+), 14 deletions(-) While iterating through sCcbVector, if find any ccb terminated more than 5 minutes, collect the garbage immediately. We don't need to push the ccb to ccbsToGc and delay the garbage collection. 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 @@ -13739,7 +13739,6 @@ ImmModel::cleanTheBasement(InvocVector& ContinuationMap2::iterator ci2; ImplementerEvtMap::iterator iem; CcbVector::iterator i3; - CcbVector ccbsToGc; SaUint32T ccbsStuck=0; /* 0 or 1 */ SaUint32T pbeRtRegress=0; /* 0 or 2 */ @@ -13778,15 +13777,17 @@ ImmModel::cleanTheBasement(InvocVector& //Conclusion: I should add cleanup logic here anyway, since it is easy to //do and solves the problem. - - for(i3=sCcbVector.begin(); i3!=sCcbVector.end(); ++i3) { + i3 = sCcbVector.begin(); + while (i3 != sCcbVector.end()) { if((*i3)->mState > IMM_CCB_CRITICAL) { /* Garbage Collect ccbInfo more than five minutes old */ if((*i3)->mWaitStartTime && (now - (*i3)->mWaitStartTime >= 300)) { TRACE_5("Removing CCB %u terminated more than 5 minutes ago", (*i3)->mId); (*i3)->mState = IMM_CCB_ILLEGAL; - ccbsToGc.push_back(*i3); + delete (*i3); + i3 = sCcbVector.erase(i3); + continue; } } else if(iAmCoord) { //Fetch CcbIds for Ccbs that have waited too long on an implementer @@ -13858,6 +13859,7 @@ ImmModel::cleanTheBasement(InvocVector& } } } + ++i3; } if(sAbortNonCriticalCcbs) { @@ -13865,16 +13867,6 @@ ImmModel::cleanTheBasement(InvocVector& sAbortNonCriticalCcbs = false; /* Reset. */ } - while((i3 = ccbsToGc.begin()) != ccbsToGc.end()) { - CcbInfo* ccb = (*i3); - ccbsToGc.erase(i3); - i3 = std::find_if(sCcbVector.begin(), sCcbVector.end(), - CcbIdIs(ccb->mId)); - osafassert(i3 != sCcbVector.end()); - sCcbVector.erase(i3); - delete (ccb); - } - ci2=sPbeRtReqContinuationMap.begin(); while(ci2!=sPbeRtReqContinuationMap.end()) { //Timeout on PRT request continuation is hardwired but long. ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel