osaf/services/saf/ntfsv/ntfs/ntfs_clm.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-)
NTF did not deal with TRY_AGAIN error code of `saClmInitialize()`, NTF 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/ntfsv/ntfs/ntfs_clm.c b/osaf/services/saf/ntfsv/ntfs/ntfs_clm.c --- a/osaf/services/saf/ntfsv/ntfs/ntfs_clm.c +++ b/osaf/services/saf/ntfsv/ntfs/ntfs_clm.c @@ -101,13 +101,25 @@ void *ntfs_clm_init_thread(void *cb) { ntfs_cb_t *_ntfs_cb = (ntfs_cb_t *) cb; SaAisErrorT rc = SA_AIS_OK; + uint32_t msecs_waited = 0; + const uint32_t max_waiting_time_10s = 10 * 1000; /* 10 secs */ + TRACE_ENTER(); + rc = saClmInitialize_4(&_ntfs_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(&_ntfs_cb->clm_hdl, &clm_callbacks, &clmVersion); + } if (rc != SA_AIS_OK) { LOG_ER("saClmInitialize failed with error: %d", rc); TRACE_LEAVE(); - exit(EXIT_FAILURE); + exit(EXIT_FAILURE); } + rc = saClmSelectionObjectGet(_ntfs_cb->clm_hdl, &ntfs_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