Hi Hans, In general lock will not fail. But when testing, one can tweek the code and reproduce the scenario.
To get clean reports, when static/dynamic memory usage is checked for all the error cases. /Neel. On Wednesday 11 September 2013 06:01 PM, Hans Feldt wrote: > Why would lock fail? > /Hans > >> -----Original Message----- >> From: reddy.neelaka...@oracle.com [mailto:reddy.neelaka...@oracle.com] >> Sent: den 11 september 2013 14:44 >> To: Anders Björnerstedt >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: [devel] [PATCH 1 of 1] IMM: fix the memory leaks when ncs_lock >> failed in IMM agent >> >> osaf/libs/agents/saf/imma/imma_oi_api.c | 6 +- >> osaf/libs/agents/saf/imma/imma_om_api.c | 84 +++++++++++++++------------ >> 2 files changed, 50 insertions(+), 40 deletions(-) >> >> >> In the IMM API's if ncs_lock fails with SA_AIS_ERR_LIBRARY, memory if any >> aloocated in the API must be freed. >> In the saImmOmClassDescriptionMemoryFree_2 API is modified to use >> imma_freeAttrValue3 >> >> diff --git a/osaf/libs/agents/saf/imma/imma_oi_api.c >> b/osaf/libs/agents/saf/imma/imma_oi_api.c >> --- a/osaf/libs/agents/saf/imma/imma_oi_api.c >> +++ b/osaf/libs/agents/saf/imma/imma_oi_api.c >> @@ -1457,7 +1457,7 @@ SaAisErrorT saImmOiImplementerClear(SaIm >> rc = SA_AIS_ERR_LIBRARY; >> /* Losing track of the pending reply count, but ERR_LIBRARY >> dominates*/ >> TRACE_4("ERR_LIBRARY: LOCK failed"); >> - goto lock_fail; >> + goto lock_fail1; >> } >> locked = true; >> >> @@ -1507,6 +1507,7 @@ SaAisErrorT saImmOiImplementerClear(SaIm >> if (locked) >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> >> + lock_fail1: >> if (out_evt) >> free(out_evt); >> >> @@ -2465,7 +2466,7 @@ SaAisErrorT saImmOiRtObjectUpdate_2(SaIm >> rc = SA_AIS_ERR_LIBRARY; >> /* Losing track of the pending reply count, but ERR_LIBRARY >> dominates*/ >> TRACE_4("ERR_LIBRARY: Lock failed"); >> - goto lock_fail; >> + goto lock_fail1; >> } >> locked = true; >> >> @@ -2496,6 +2497,7 @@ SaAisErrorT saImmOiRtObjectUpdate_2(SaIm >> >> skip_over_send: >> bad_sync: >> + lock_fail1: >> if (evt.info.immnd.info.objModify.objectName.buf) { /*free-1 */ >> free(evt.info.immnd.info.objModify.objectName.buf); >> evt.info.immnd.info.objModify.objectName.buf = NULL; >> diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c >> b/osaf/libs/agents/saf/imma/imma_om_api.c >> --- a/osaf/libs/agents/saf/imma/imma_om_api.c >> +++ b/osaf/libs/agents/saf/imma/imma_om_api.c >> @@ -376,6 +376,7 @@ static SaAisErrorT initialize_common(SaI >> imma_callback_ipc_destroy(cl_node); >> >> ipc_init_fail: >> + lock_fail: >> if (rc != SA_AIS_OK) { >> free(cl_node); >> cl_node=NULL; >> @@ -384,7 +385,6 @@ static SaAisErrorT initialize_common(SaI >> if (locked) >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> >> - lock_fail: >> >> if (out_evt) { >> free(out_evt); >> @@ -3604,7 +3604,7 @@ static SaAisErrorT admin_op_invoke_commo >> if (!locked && m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != >> NCSCC_RC_SUCCESS) { >> TRACE_4("ERR_LIBRARY: Lock failed"); >> rc = SA_AIS_ERR_LIBRARY; >> - goto lock_fail; >> + goto lock_fail1; >> } >> locked = true; >> >> @@ -3645,6 +3645,24 @@ static SaAisErrorT admin_op_invoke_commo >> if (locked) >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> >> + lock_fail1: >> + if(returnParams && *returnParams != NULL && rc == SA_AIS_ERR_LIBRARY) { >> + SaImmAdminOperationParamsT_2 **Params = *returnParams; >> + SaImmAdminOperationParamsT_2 *q = NULL; >> + unsigned int ix = 0; >> + while(Params[ix]) { >> + q = Params[ix]; >> + imma_freeAttrValue3(q->paramBuffer, q->paramType); >> + free(q->paramName); >> + q->paramName = NULL; >> + free(q); >> + ++ix; >> + } >> + >> + free(Params); >> + } >> + >> + >> lock_fail: >> >> done: >> @@ -4754,7 +4772,7 @@ SaAisErrorT saImmOmClassDescriptionGet_2 >> rc = SA_AIS_ERR_LIBRARY; >> TRACE_4("ERR_LIBRARY: Lock failed"); >> /* Losing track of the pending reply count, but ERR_LIBRARY >> dominates*/ >> - goto lock_fail; >> + goto lock_fail1; >> } >> locked = true; >> >> @@ -4779,6 +4797,24 @@ SaAisErrorT saImmOmClassDescriptionGet_2 >> if (locked) >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> >> + lock_fail1: >> + >> + if (attrDefinition && rc == SA_AIS_ERR_LIBRARY) { >> + SaImmAttrDefinitionT_2 **attr1 = *attrDefinition; >> + int i; >> + for (i = 0; attr1[i]; ++i) { >> + if (attr1[i]->attrDefaultValue) { >> + imma_freeAttrValue3(attr1[i]->attrDefaultValue, >> attr1[i]->attrValueType); /* free-4, free-5 */ >> + attr1[i]->attrDefaultValue = 0; >> + } >> + free(attr1[i]->attrName); /*free-3 */ >> + attr1[i]->attrName = 0; >> + free(attr1[i]); /*free-2 */ >> + attr1[i] = 0; >> + } >> + free(attr1); /*free-1 */ >> + } >> + >> lock_fail: >> >> TRACE_LEAVE(); >> @@ -4821,36 +4857,7 @@ SaAisErrorT saImmOmClassDescriptionMemor >> int i; >> for (i = 0; attrDefinition[i]; ++i) { >> if (attrDefinition[i]->attrDefaultValue) { >> - SaStringT *strp; >> - SaAnyT *anyp; >> - switch (attrDefinition[i]->attrValueType) { >> - case SA_IMM_ATTR_SAINT32T: >> //intended fall through >> - case SA_IMM_ATTR_SAUINT32T: >> //intended fall through >> - case SA_IMM_ATTR_SAINT64T: >> //intended fall through >> - case SA_IMM_ATTR_SAUINT64T: >> //intended fall through >> - case SA_IMM_ATTR_SATIMET: >> //intended fall through >> - case SA_IMM_ATTR_SAFLOATT: >> //intended fall through >> - case SA_IMM_ATTR_SADOUBLET: >> - case SA_IMM_ATTR_SANAMET: >> - >> free(attrDefinition[i]->attrDefaultValue); /*free-4 */ >> - break; >> - >> - case SA_IMM_ATTR_SASTRINGT: >> - strp = (SaStringT >> *)attrDefinition[i]->attrDefaultValue; >> - free(*strp); /*free-5 */ >> - free(strp); /*free-4 */ >> - break; >> - >> - case SA_IMM_ATTR_SAANYT: >> - anyp = (SaAnyT >> *)attrDefinition[i]->attrDefaultValue; >> - free(anyp->bufferAddr); >> /*free-5 */ >> - anyp->bufferAddr = 0; >> - free(anyp); /*free-4 */ >> - break; >> - >> - default: >> - abort(); >> - }//switch >> + >> imma_freeAttrValue3(attrDefinition[i]->attrDefaultValue, >> attrDefinition[i]->attrValueType); /* free- >> 4, free-5 */ >> attrDefinition[i]->attrDefaultValue = 0; >> } >> free(attrDefinition[i]->attrName); /*free-3 */ >> @@ -5462,7 +5469,7 @@ mds_send_fail: >> if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) { >> rc = SA_AIS_ERR_LIBRARY; >> TRACE_4("ERR_LIBRARY: Lock error"); >> - goto release_cb; >> + goto lock_fail; >> } >> locked = true; >> >> @@ -5500,6 +5507,8 @@ mds_send_fail: >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> } >> >> +lock_fail: >> + >> if(out_evt) { >> if(out_evt->info.imma.info.searchNextRsp) { >> >> if(out_evt->info.imma.info.searchNextRsp->attrValuesList) { >> @@ -6256,7 +6265,7 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa >> if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) { >> rc = SA_AIS_ERR_LIBRARY; >> TRACE_4("ERR_LIBRARY: Lock error"); >> - goto release_cb; >> + goto lock_fail; >> } >> locked = true; >> >> @@ -6326,7 +6335,7 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa >> if (locked) { >> m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); >> } >> - >> +lock_fail: >> if(out_evt) { >> free(out_evt); >> out_evt=NULL; >> @@ -6469,8 +6478,7 @@ SaAisErrorT saImmOmSearchNext_2(SaImmSea >> >> if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) { >> TRACE_4("ERR_LIBRARY: Lock error"); >> - return SA_AIS_ERR_LIBRARY; >> - /*Error case will leak memory. */ >> + goto release_evt; >> } >> locked = true; >> >> >> ------------------------------------------------------------------------------ >> How ServiceNow helps IT people transform IT departments: >> 1. Consolidate legacy IT systems to a single system of record for IT >> 2. Standardize and globalize service processes across IT >> 3. Implement zero-touch automation to replace manual, redundant tasks >> http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel