Nack. Just returning on failure to obtain the lock does not seem like a good solution. The stale marking of the clients will then just silently be skipped. This will cause unpredicatable behavior towards the user.
Instead you need a retry loop with small delay and if *that* fails then I suggest Go ahead and stale mark anyway. The alternative is to assert and crash the user process. /AndersBj -----Original Message----- From: Hans Feldt Sent: den 29 augusti 2014 10:02 To: Anders Björnerstedt Cc: [email protected] Subject: [PATCH 1 of 1] imma: add missing lock when traversing client db from mds thread [#1033] osaf/libs/agents/saf/imma/imma_db.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/osaf/libs/agents/saf/imma/imma_db.c b/osaf/libs/agents/saf/imma/imma_db.c --- a/osaf/libs/agents/saf/imma/imma_db.c +++ b/osaf/libs/agents/saf/imma/imma_db.c @@ -676,13 +676,17 @@ void imma_mark_clients_stale(IMMA_CB *cb ******************************************************************************/ void imma_process_stale_clients(IMMA_CB *cb) { - /* We are LOCKED already */ IMMA_CLIENT_NODE * clnode; SaImmHandleT *temp_ptr=0; SaImmHandleT temp_hdl=0; TRACE_ENTER(); + if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != NCSCC_RC_SUCCESS) { + TRACE_3("Lock failure"); + return; + } + /* scan the entire handle db & check each record */ while ((clnode = (IMMA_CLIENT_NODE *) ncs_patricia_tree_getnext(&cb->client_tree, (uint8_t *)temp_ptr))) @@ -707,6 +711,8 @@ void imma_process_stale_clients(IMMA_CB } } + m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE); + TRACE_LEAVE(); } ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
