osaf/services/saf/logsv/lgs/lgs_clm.cc | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)
LOG did not deal with TRY_AGAIN error code of `saClmInitialize()`, LOG would exit, and cause node reboot if getting TRY_AGAIN. The patch adds a while loop to do retry when getting TRY_AGAIN. diff --git a/osaf/services/saf/logsv/lgs/lgs_clm.cc b/osaf/services/saf/logsv/lgs/lgs_clm.cc --- a/osaf/services/saf/logsv/lgs/lgs_clm.cc +++ b/osaf/services/saf/logsv/lgs/lgs_clm.cc @@ -348,13 +348,25 @@ void *lgs_clm_init_thread(void *cb) { static SaVersionT clmVersion = { 'B', 0x04, 0x01 }; lgs_cb_t *_lgs_cb = reinterpret_cast<lgs_cb_t *> (cb); SaAisErrorT rc; + uint32_t msecs_waited = 0; + const uint32_t max_waiting_time_10s = 10 * 1000; /* 10 secs */ + TRACE_ENTER(); + rc = saClmInitialize_4(&_lgs_cb->clm_hdl, &clm_callbacks, &clmVersion); + while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_TIMEOUT) || + (rc == SA_AIS_ERR_UNAVAILABLE)) && + (msecs_waited < max_waiting_time_10s)) { + usleep(100*1000); + msecs_waited += 100; + rc = saClmInitialize_4(&_lgs_cb->clm_hdl, &clm_callbacks, &clmVersion); + } if (rc != SA_AIS_OK) { LOG_ER("saClmInitialize failed with error: %d", rc); TRACE_LEAVE(); exit(EXIT_FAILURE); } + rc = saClmSelectionObjectGet(_lgs_cb->clm_hdl, &lgs_cb->clmSelectionObject); if (rc != SA_AIS_OK) { LOG_ER("saClmSelectionObjectGet failed with error: %d", rc); ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel