Hi Vu, My comments: - The max_waiting_time_10s, do we really need a time limitation? The clm initialization should be completed, now it is threaded, so it can retry till success - As same as Lennart's comment on #2192, use base::Sleep, or osaf_nanosleep
Thanks, Minh On 17/11/16 17:28, Vu Minh Nguyen wrote: > 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