I have created ticket [#2275] for removing this stuff. regards,
Anders Widell On 01/24/2017 10:58 AM, Zoran Milinkovic wrote: > Hi Anders, > > I'll add your comment when I push the patch. > > Thanks, > Zoran > > -----Original Message----- > From: Anders Widell > Sent: den 10 januari 2017 15:38 > To: Zoran Milinkovic <zoran.milinko...@ericsson.com>; ramesh.bet...@oracle.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: Re: [devel] [PATCH 1 of 1] base: fix memory leak and timer state in > sysf_tmr.c [#2251] > > Ack with comments inline, marked AndersW> > > regards, > > Anders Widell > > > On 01/04/2017 03:28 PM, Zoran Milinkovic wrote: >> src/base/sysf_tmr.c | 9 ++++++++- >> 1 files changed, 8 insertions(+), 1 deletions(-) >> >> >> Fix memory leak in ncs_tmr_add_pat_node() Fix timer state, so that the >> timer will not execute if ncs_tmr_start() fails >> >> diff --git a/src/base/sysf_tmr.c b/src/base/sysf_tmr.c >> --- a/src/base/sysf_tmr.c >> +++ b/src/base/sysf_tmr.c >> @@ -180,6 +180,7 @@ static struct timespec ts_start; >> static uint32_t ncs_tmr_add_pat_node(SYSF_TMR *tmr) >> { >> SYSF_TMR_PAT_NODE *temp_tmr_pat_node = NULL; >> + int rc; > AndersW> should be "unsigned int" to match the return type of > ncs_patricia_tree_add() >> >> temp_tmr_pat_node = (SYSF_TMR_PAT_NODE >> *)ncs_patricia_tree_get(&gl_tcb.tmr_pat_tree, (uint8_t *)&tmr->key); >> >> @@ -190,7 +191,11 @@ static uint32_t ncs_tmr_add_pat_node(SYS >> memset(temp_tmr_pat_node, '\0', sizeof(SYSF_TMR_PAT_NODE)); >> temp_tmr_pat_node->key = tmr->key; >> temp_tmr_pat_node->pat_node.key_info = (uint8_t >> *)&temp_tmr_pat_node->key; >> - ncs_patricia_tree_add(&gl_tcb.tmr_pat_tree, (NCS_PATRICIA_NODE >> *)&temp_tmr_pat_node->pat_node); >> + rc = ncs_patricia_tree_add(&gl_tcb.tmr_pat_tree, >> (NCS_PATRICIA_NODE *)&temp_tmr_pat_node->pat_node); >> + if(rc != NCSCC_RC_SUCCESS) { >> + m_NCS_MEM_FREE(temp_tmr_pat_node, >> NCS_MEM_REGION_PERSISTENT, NCS_SERVICE_ID_LEAP_TMR, 0); >> + return NCSCC_RC_FAILURE; >> + } >> } >> >> if (temp_tmr_pat_node->tmr_list_start == NULL) { @@ -733,6 +738,8 >> @@ tmr_t ncs_tmr_start(tmr_t tid, int64_t t >> on the "sel_obj". */ >> if (m_NCS_SEL_OBJ_IND(&gl_tcb.sel_obj) != NCSCC_RC_SUCCESS) { >> /* We would never reach here! */ >> + /* Ignore this timer. Indication was not successfully >> sent */ >> + TMR_SET_STATE(tmr, TMR_STATE_DESTROY); > AndersW> I think it is better to call osaf_abort() in this error case, > since there must be some serious problem. Setting the timer state to > TMR_STATE_DESTROY could be dangerous - doesn't that mean that the timer could > be re-used by someone else? >> m_NCS_UNLOCK(&gl_tcb.safe.enter_lock, NCS_LOCK_WRITE); >> m_LEAP_DBG_SINK_VOID; >> return NULL; >> >> ---------------------------------------------------------------------- >> -------- Check out the vibrant tech community on one of the world's >> most engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel >> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel