Thanks Lennart. I will update the code as your comments before pushing. @Ravi: Any comment from you? Thanks.
Regards, Vu > -----Original Message----- > From: Lennart Lund [mailto:lennart.l...@ericsson.com] > Sent: Thursday, April 12, 2018 8:32 PM > To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>; > ravisekhar.ko...@oracle.com; Hans Nordebäck > <hans.nordeb...@ericsson.com>; Anders Widell > <anders.wid...@ericsson.com> > Cc: opensaf-devel@lists.sourceforge.net; Lennart Lund > <lennart.l...@ericsson.com> > Subject: RE: [PATCH 1/1] imm: make version parameter in immutil_xxx non- > const [#2830] > > > > > -----Original Message----- > > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > > Sent: den 12 april 2018 12:37 > > To: Lennart Lund <lennart.l...@ericsson.com>; > > ravisekhar.ko...@oracle.com; Hans Nordebäck > > <hans.nordeb...@ericsson.com>; Anders Widell > > <anders.wid...@ericsson.com> > > Cc: opensaf-devel@lists.sourceforge.net > > Subject: RE: [PATCH 1/1] imm: make version parameter in immutil_xxx non- > > const [#2830] > > > > Hi Lennart, > > > > See my response inline, started with [Vu]. > > > > Regards, Vu > > > > > -----Original Message----- > > > From: Lennart Lund [mailto:lennart.l...@ericsson.com] > > > Sent: Thursday, April 12, 2018 5:13 PM > > > To: Vu Minh Nguyen <vu.m.ngu...@dektech.com.au>; > > > ravisekhar.ko...@oracle.com; Hans Nordebäck > > > <hans.nordeb...@ericsson.com>; Anders Widell > > > <anders.wid...@ericsson.com> > > > Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen > > > <vu.m.ngu...@dektech.com.au> > > > Subject: RE: [PATCH 1/1] imm: make version parameter in immutil_xxx > > non- > > > const [#2830] > > > > > > Hi Vu, > > > > > > Ack, but an important issue to fix. See comments below [Lennart] > > > > > > Thanks > > > Lennart > > > > > > > -----Original Message----- > > > > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > > > > Sent: den 5 april 2018 12:39 > > > > To: ravisekhar.ko...@oracle.com; Hans Nordebäck > > > > <hans.nordeb...@ericsson.com>; Anders Widell > > > > <anders.wid...@ericsson.com>; Lennart Lund > > > <lennart.l...@ericsson.com> > > > > Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen > > > > <vu.m.ngu...@dektech.com.au> > > > > Subject: [PATCH 1/1] imm: make version parameter in immutil_xxx non- > > > > const [#2830] > > > > > > > > The version in saImmO{m,i}Initialize is input/output parameter and is > > > > declared > > > > as non-constant for both IMM OM and OI API according to SAF spec. > > > > But in immutil wrapper library, some are declared as constant and don't > > > > update > > > > the in/out version before returning from such wrappers. > > > > > > > > This patch makes that parameter non-const and do update the version > > > > before returning from wrapper APIs. Also fix the wrong usage of > > > > these wrapper, passed const version, in some services/applications. > > > > --- > > > > src/amf/amfd/imm.cc | 11 +++++++---- > > > > src/amf/amfnd/util.cc | 3 ++- > > > > src/log/apitest/imm_tstutil.c | 5 ++++- > > > > src/log/apitest/logtest.c | 9 ++++++--- > > > > src/log/apitest/logtestfr.c | 6 ++++-- > > > > src/log/apitest/tet_log_runtime_cfgobj.c | 3 ++- > > > > src/log/logd/lgs_config.cc | 3 ++- > > > > src/log/logd/lgs_imm.cc | 15 ++++++++++----- > > > > src/log/logd/lgs_imm_gcfg.cc | 7 +++++-- > > > > src/osaf/immutil/immutil.c | 20 +++++++++++++++----- > > > > src/osaf/immutil/immutil.h | 6 +++--- > > > > src/smf/smfd/SmfAdminState.cc | 4 ++-- > > > > src/smf/smfd/SmfExecControlHdl.cc | 3 ++- > > > > 13 files changed, 64 insertions(+), 31 deletions(-) > > > > > > > > diff --git a/src/amf/amfd/imm.cc b/src/amf/amfd/imm.cc > > > > index 47c0e5a..8c70325 100644 > > > > --- a/src/amf/amfd/imm.cc > > > > +++ b/src/amf/amfd/imm.cc > > > > @@ -1461,6 +1461,7 @@ done: > > > > SaAisErrorT avd_imm_init(void *avd_cb) { > > > > SaAisErrorT error = SA_AIS_OK; > > > > AVD_CL_CB *cb = (AVD_CL_CB *)avd_cb; > > > > + SaVersionT local_version = immVersion; > > > > > > > > TRACE_ENTER(); > > > > > > > > @@ -1471,13 +1472,13 @@ SaAisErrorT avd_imm_init(void *avd_cb) { > > > > > > > > cb->avd_imm_status = AVD_IMM_INIT_ONGOING; > > > > if ((error = immutil_saImmOiInitialize_2(&cb->immOiHandle, > > > > &avd_callbacks, > > > > - &immVersion)) != SA_AIS_OK) > > { > > > > + &local_version)) != > > SA_AIS_OK) { > > > > LOG_ER("saImmOiInitialize failed %u", error); > > > > goto done; > > > > } > > > > > > > [Lennart] local_version has to be set again to immVersion here. This is > > the > > > case in all functions where initialize using an IMM version is done more > > than > > > once. In this case both OM and OI is initialized. In some cases it may be > > a try > > > again loop where an initialize API may be called several times. > > > Note: I have only written this comment once but it may be applicable in > > > several places. > > [Vu] I don't think it is needed here as `local_version` is backup and set > > again inside that immutil_saImmOiInitialize_2() wrapper. > > Unless immutil_saImmOiInitialize_2() is called inside a loop(*), we don't > > need to have `local_version` reset.[Lennart] > > [Lennart] No, this is not the case and immutil initialize functions must return > the "out" value and does just that. > The important fix done with this ticket is to make sure that immutil initialize > functions sets the in/out version parameter to the out value. This means that > this function that calls immutil initialize functions has to use a local version > variable and reset that variable back to the wanted state before each call to > an immutil initialize function using the version. > In this case first immutil_saImmOiInitialize_2(..., *local_version) is called > which will change content of local_version after that > immutil_saImmOmInitialize(..., *local_version) is called and local_version > must be restored in between. > > > > (*) Please refer to my next comment for the case - called inside a loop. > > > > > > if ((error = immutil_saImmOmInitialize(&cb->immOmHandle, nullptr, > > > > - &immVersion)) != SA_AIS_OK) { > > > > + &local_version)) != SA_AIS_OK) > > { > > > > LOG_ER("saImmOmInitialize failed %u", error); > > > > goto done; > > > > } > > > > @@ -2075,6 +2076,7 @@ void avd_imm_update_runtime_attrs(void) { > > > > */ > > > > static void *avd_imm_reinit_bg_thread(void *_cb) { > > > > SaAisErrorT rc = SA_AIS_OK; > > > > + SaVersionT local_version; > > > > AVD_CL_CB *cb = (AVD_CL_CB *)_cb; > > > > AVD_EVT *evt; > > > > uint32_t status; > > > > @@ -2098,9 +2100,10 @@ static void *avd_imm_reinit_bg_thread(void > > > > *_cb) { > > > > > > > > avd_cb->immOiHandle = 0; > > > > avd_cb->is_implementer = false; > > > > + local_version = immVersion; > > [Vu] Since immutil_saImmOiInitialize_2() is called inside a loop, we need to > > reset `local_version`. > [Lennart] Yes, must be done in every place where an immutil initialize > function is called (after the fix in immutil) or an initialize API function is called > directly > > > > > > > > if ((rc = immutil_saImmOiInitialize_2(&cb->immOiHandle, > > > &avd_callbacks, > > > > - &immVersion)) != SA_AIS_OK) { > > > > + &local_version)) != > > SA_AIS_OK) { > > > > LOG_ER("saImmOiInitialize failed %u", rc); > > > > osaf_mutex_unlock_ordie(&imm_reinit_mutex); > > > > exit(EXIT_FAILURE); > > > > @@ -2141,7 +2144,7 @@ static void *avd_imm_reinit_bg_thread(void > > > *_cb) > > > > { > > > > /* Lets re-initialize Om interface also. */ > > > > (void)immutil_saImmOmFinalize(cb->immOmHandle); > > > > if ((rc = immutil_saImmOmInitialize(&cb->immOmHandle, nullptr, > > > > - &immVersion)) != SA_AIS_OK) { > > > > + &local_version)) != > > SA_AIS_OK) { > > > > LOG_ER("saImmOmInitialize failed %u", rc); > > > > continue; > > > > } > > > > diff --git a/src/amf/amfnd/util.cc b/src/amf/amfnd/util.cc > > > > index f6dbb49..38bf426 100644 > > > > --- a/src/amf/amfnd/util.cc > > > > +++ b/src/amf/amfnd/util.cc > > > > @@ -250,8 +250,9 @@ const char > *avnd_failed_state_file_location(void) > > { > > > > SaAisErrorT saImmOmInitialize_cond(SaImmHandleT *immHandle, > > > > const SaImmCallbacksT *immCallbacks, > > > > const SaVersionT *version) { > > > > + SaVersionT local_version = *version; > > > > if (avnd_cb->scs_absence_max_duration == 0) { > > > > - return immutil_saImmOmInitialize(immHandle, immCallbacks, > > version); > > > > + return immutil_saImmOmInitialize(immHandle, immCallbacks, > > > > &local_version); > > > > } > > > > > > > > SaVersionT localVer = *version; > > > > diff --git a/src/log/apitest/imm_tstutil.c > > b/src/log/apitest/imm_tstutil.c > > > > index 194dffa..2143f83 100644 > > > > --- a/src/log/apitest/imm_tstutil.c > > > > +++ b/src/log/apitest/imm_tstutil.c > > > > @@ -32,6 +32,7 @@ bool > > > > get_multivalue_type_string_from_imm(SaImmHandleT *omHandle, > > > > { > > > > SaAisErrorT om_rc = SA_AIS_OK; > > > > SaImmAccessorHandleT accessorHandle; > > > > + SaVersionT local_version; > > > > SaImmAttrValuesT_2 *attribute; > > > > SaImmAttrValuesT_2 **attributes; > > > > bool func_rc = true; > > > > @@ -39,10 +40,12 @@ bool > > > > get_multivalue_type_string_from_imm(SaImmHandleT *omHandle, > > > > // printf(">> get_multivalue_string_type_from_imm()\n"); > > > > > > > > do { > > > > + local_version = kImmVersion; > > > > /* Make sure this is a NULL pointer if no values are found > > */ > > > > *multivalue_array = NULL; > > > > > > > > - om_rc = immutil_saImmOmInitialize(omHandle, NULL, > > > > &kImmVersion); > > > > + om_rc = immutil_saImmOmInitialize(omHandle, NULL, > > > > + &local_version); > > > > if (om_rc != SA_AIS_OK) { > > > > printf("immutil_saImmOmInitialize Fail '%s'\n", > > > > saf_error(om_rc)); > > > > diff --git a/src/log/apitest/logtest.c b/src/log/apitest/logtest.c > > > > index f8fe135..aabd1e5 100644 > > > > --- a/src/log/apitest/logtest.c > > > > +++ b/src/log/apitest/logtest.c > > > > @@ -102,6 +102,7 @@ void init_logrootpath(void) > > > > SaImmHandleT omHandle; > > > > SaConstStringT config = "logConfig=1,safApp=safLogService"; > > > > SaNameT objectName; > > > > + SaVersionT local_version = kImmVersion; > > > > SaImmAccessorHandleT accessorHandle; > > > > SaImmAttrValuesT_2 *attribute; > > > > SaImmAttrValuesT_2 **attributes; > > > > @@ -112,7 +113,7 @@ void init_logrootpath(void) > > > > > > > > saAisNameLend(config, &objectName); > > > > /* NOTE: immutil init osaf_assert if error */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Get all attributes of the object */ > > > > @@ -140,6 +141,7 @@ int get_attr_value(SaNameT *inObjName, char > > > > *inAttr, void *outValue) > > > > { > > > > SaImmHandleT omHandle; > > > > SaImmAccessorHandleT accessorHandle; > > > > + SaVersionT local_version = kImmVersion; > > > > SaImmAttrValuesT_2 *attribute = NULL; > > > > SaImmAttrValuesT_2 **attributes; > > > > SaAisErrorT ais_rc = SA_AIS_OK; > > > > @@ -147,7 +149,7 @@ int get_attr_value(SaNameT *inObjName, char > > > > *inAttr, void *outValue) > > > > int rc = 0; > > > > > > > > /* NOTE: immutil init osaf_assert if error */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Get all attributes of the object */ > > > > @@ -286,6 +288,7 @@ int get_active_sc(void) > > > > SaImmHandleT omHandle; > > > > SaConstStringT objname = "safSu=SC-1,safSg=2N,safApp=OpenSAF"; > > > > SaNameT objectName1; > > > > + SaVersionT local_version = kImmVersion; > > > > SaImmAccessorHandleT accessorHandle; > > > > SaImmAttrValuesT_2 **attributes; > > > > const char saAmfSUNumCurrActiveSIs[] = > > > > "saAmfSUNumCurrActiveSIs"; > > > > @@ -296,7 +299,7 @@ int get_active_sc(void) > > > > saAisNameLend(objname, &objectName1); > > > > /* NOTE: immutil init osaf_assert if error > > > > */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Get attributes of the object > > > > diff --git a/src/log/apitest/logtestfr.c b/src/log/apitest/logtestfr.c > > > > index b2ef30b..a110240 100644 > > > > --- a/src/log/apitest/logtestfr.c > > > > +++ b/src/log/apitest/logtestfr.c > > > > @@ -91,11 +91,12 @@ static int get_active_sc(void) > > > > const char saAmfSUNumCurrActiveSIs[] = > > > > "saAmfSUNumCurrActiveSIs"; > > > > SaImmAttrNameT attributeNames[2] = {(char > > > > *)saAmfSUNumCurrActiveSIs, > > > > NULL}; > > > > + SaVersionT local_version = kImmVersion; > > > > SaUint32T curr_act_sis = 0; > > > > > > > > /* NOTE: immutil init osaf_assert if error > > > > */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Get attributes of the object > > > > @@ -191,9 +192,10 @@ void get_logRootDirectory(char *path_str) > > > > const char logRootDirectory_name[] = "logRootDirectory"; > > > > SaImmAttrNameT attributeNames[2] = {(char > > > > *)logRootDirectory_name, > > > > NULL}; > > > > + SaVersionT local_version = kImmVersion; > > > > > > > > /* NOTE: immutil init osaf_assert if error */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Get all attributes of the object */ > > > > diff --git a/src/log/apitest/tet_log_runtime_cfgobj.c > > > > b/src/log/apitest/tet_log_runtime_cfgobj.c > > > > index 047296c..ae83e65 100644 > > > > --- a/src/log/apitest/tet_log_runtime_cfgobj.c > > > > +++ b/src/log/apitest/tet_log_runtime_cfgobj.c > > > > @@ -37,13 +37,14 @@ void log_rt_cf_obj_compare(void) > > > > SaNameT object_name; > > > > SaImmAccessorHandleT accessorHandle; > > > > SaImmAttrValuesT_2 **attributes; > > > > + SaVersionT local_version = kImmVersion; > > > > uint32_t r_cnt = 0; /* Counter for attributes in runtime object */ > > > > uint32_t c_cnt = 0; > > > > SaAisErrorT ais_rc = SA_AIS_OK; > > > > int tst_res = 0; /* Test result: 0 = PASS */ > > > > > > > > /* NOTE: immutil will osaf_assert if error */ > > > > - (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &kImmVersion); > > > > + (void)immutil_saImmOmInitialize(&omHandle, NULL, > > > > &local_version); > > > > (void)immutil_saImmOmAccessorInitialize(omHandle, > > > > &accessorHandle); > > > > > > > > /* Count attributes in configuration object > > > > diff --git a/src/log/logd/lgs_config.cc b/src/log/logd/lgs_config.cc > > > > index 4190e30..71d7318 100644 > > > > --- a/src/log/logd/lgs_config.cc > > > > +++ b/src/log/logd/lgs_config.cc > > > > @@ -975,6 +975,7 @@ static void read_logsv_config_obj_2() { > > > > SaImmAccessorHandleT accessorHandle; > > > > SaImmAttrValuesT_2 *attribute; > > > > SaImmAttrValuesT_2 **attributes; > > > > + SaVersionT local_version = kImmVersion; > > > > int i = 0; > > > > int n; > > > > > > > > @@ -982,7 +983,7 @@ static void read_logsv_config_obj_2() { > > > > > > > > /* NOTE: immutil init will osaf_assert if error */ > > > > SaAisErrorT om_rc = > > > > - immutil_saImmOmInitialize(&omHandle, nullptr, &kImmVersion); > > > > + immutil_saImmOmInitialize(&omHandle, nullptr, &local_version); > > > > if (om_rc != SA_AIS_OK) { > > > > LOG_ER("immutil_saImmOmInitialize failed: %s", saf_error(om_rc)); > > > > osaf_abort(0); > > > > diff --git a/src/log/logd/lgs_imm.cc b/src/log/logd/lgs_imm.cc > > > > index 60870fa..f772dd5 100644 > > > > --- a/src/log/logd/lgs_imm.cc > > > > +++ b/src/log/logd/lgs_imm.cc > > > > @@ -973,6 +973,7 @@ static lgs_stream_defval_t > > > > *get_SaLogStreamConfig_default() { > > > > SaImmClassCategoryT cc; > > > > SaImmAttrDefinitionT_2 **attributes = NULL; > > > > SaImmAttrDefinitionT_2 *attribute = NULL; > > > > + SaVersionT local_version = kImmVersion; > > > > > > > > TRACE_ENTER(); > > > > if (lgs_stream_defval_updated_flag == false) { > > > > @@ -980,7 +981,7 @@ static lgs_stream_defval_t > > > > *get_SaLogStreamConfig_default() { > > > > * We are only interested in saLogStreamMaxLogFileSize and > > > > * saLogStreamFixedLogRecordSize > > > > */ > > > > - rc = immutil_saImmOmInitialize(&om_handle, NULL, > &kImmVersion); > > > > + rc = immutil_saImmOmInitialize(&om_handle, NULL, > &local_version); > > > > if (rc != SA_AIS_OK) { > > > > TRACE("immutil_saImmOmInitialize fail rc=%d", rc); > > > > } > > > > @@ -2908,6 +2909,7 @@ SaAisErrorT > > > lgs_imm_init_configStreams(lgs_cb_t > > > > *cb) { > > > > SaImmSearchParametersT_2 objectSearch; > > > > SaImmAttrValuesT_2 **attributes; > > > > SaImmAttrDefinitionT_2** attr_definitions; > > > > + SaVersionT local_version = kImmVersion; > > > > int wellknownStreamId = 0; > > > > int appStreamId = 3; > > > > uint32_t streamId = 0; > > > > @@ -2916,7 +2918,7 @@ SaAisErrorT > > > lgs_imm_init_configStreams(lgs_cb_t > > > > *cb) { > > > > SaBoolT endloop = SA_FALSE, jstart = SA_TRUE; > > > > TRACE_ENTER(); > > > > > > > > - om_rc = immutil_saImmOmInitialize(&omHandle, NULL, > > &kImmVersion); > > > > + om_rc = immutil_saImmOmInitialize(&omHandle, NULL, > > &local_version); > > > > if (om_rc != SA_AIS_OK) { > > > > LOG_ER("immutil_saImmOmInitialize failed %s", saf_error(om_rc)); > > > > osaf_abort(0); > > > > @@ -3309,13 +3311,14 @@ void lgs_search_stream_objects() { > > > > SaAisErrorT ais_rc = SA_AIS_OK; > > > > SaImmHandleT immOmHandle; > > > > SaImmSearchHandleT immSearchHandle; > > > > + SaVersionT local_version = kImmVersion; > > > > const char *class_name = "SaLogStream"; > > > > > > > > TRACE_ENTER(); > > > > > > > > /* Intialize Om API > > > > */ > > > > - ais_rc = immutil_saImmOmInitialize(&immOmHandle, NULL, > > > > &kImmVersion); > > > > + ais_rc = immutil_saImmOmInitialize(&immOmHandle, NULL, > > > > &local_version); > > > > if (ais_rc != SA_AIS_OK) { > > > > LOG_WA("%s saImmOmInitialize FAIL %d", __FUNCTION__, ais_rc); > > > > goto done; > > > > @@ -3479,6 +3482,7 @@ int > > lgs_get_streamobj_attr(SaImmAttrValuesT_2 > > > > ***attrib_out, > > > > int rc = 0; > > > > SaAisErrorT ais_rc = SA_AIS_OK; > > > > SaImmAccessorHandleT accessorHandle; > > > > + SaVersionT local_version = kImmVersion; > > > > char *attribute_names[] = { > > > > const_cast<char *>("saLogStreamFileName"), > > > > const_cast<char *>("saLogStreamPathName"), > > > > @@ -3503,7 +3507,7 @@ int > > lgs_get_streamobj_attr(SaImmAttrValuesT_2 > > > > ***attrib_out, > > > > > > > > /* Initialize Om API > > > > */ > > > > - ais_rc = immutil_saImmOmInitialize(immOmHandle, NULL, > > > > &kImmVersion); > > > > + ais_rc = immutil_saImmOmInitialize(immOmHandle, NULL, > > > > &local_version); > > > > if (ais_rc != SA_AIS_OK) { > > > > LOG_WA("\t%s saImmOmInitialize FAIL %d", __FUNCTION__, ais_rc); > > > > rc = -1; > > > > @@ -3584,6 +3588,7 @@ SaUint32T > > > > *lgs_get_scAbsenceAllowed_attr(SaUint32T *attr_val) { > > > > SaImmHandleT immOmHandle; > > > > SaImmAttrValuesT_2 *attribute; > > > > SaImmAttrValuesT_2 **attributes; > > > > + SaVersionT local_version = kImmVersion; > > > > > > > > TRACE_ENTER(); > > > > char *attribute_names[] = {const_cast<char *>("scAbsenceAllowed"), > > > > NULL}; > > > > @@ -3599,7 +3604,7 @@ SaUint32T > > > > *lgs_get_scAbsenceAllowed_attr(SaUint32T *attr_val) { > > > > > > > > /* Initialize Om API > > > > */ > > > > - ais_rc = immutil_saImmOmInitialize(&immOmHandle, NULL, > > > > &kImmVersion); > > > > + ais_rc = immutil_saImmOmInitialize(&immOmHandle, NULL, > > > > &local_version); > > > > if (ais_rc != SA_AIS_OK) { > > > > LOG_WA("\t%s saImmOmInitialize FAIL %d", __FUNCTION__, ais_rc); > > > > goto done; > > > > diff --git a/src/log/logd/lgs_imm_gcfg.cc > b/src/log/logd/lgs_imm_gcfg.cc > > > > index f7d59d1..64a5f3f 100644 > > > > --- a/src/log/logd/lgs_imm_gcfg.cc > > > > +++ b/src/log/logd/lgs_imm_gcfg.cc > > > > @@ -571,6 +571,7 @@ static int read_network_name() { > > > > SaNameT object_name; > > > > SaImmAttrValuesT_2 **attributes; > > > > SaImmAttrValuesT_2 *attribute; > > > > + SaVersionT local_version = kImmVersion; > > > > void *value = NULL; > > > > > > > > /* Setup search initialize parameters */ > > > > @@ -589,7 +590,7 @@ static int read_network_name() { > > > > /* > > > > * Initialize an IMM object manager > > > > */ > > > > - ais_rc = immutil_saImmOmInitialize(&om_handle, NULL, > > &kImmVersion); > > > > + ais_rc = immutil_saImmOmInitialize(&om_handle, NULL, > > &local_version); > > > > if (ais_rc != SA_AIS_OK) { > > > > TRACE("immutil_saImmOmInitialize FAIL %s", saf_error(ais_rc)); > > > > rc = -1; > > > > @@ -685,6 +686,7 @@ done: > > > > static int applier_init(SaImmOiHandleT *imm_appl_hdl, > > > > SaSelectionObjectT *imm_appl_selobj) { > > > > SaAisErrorT ais_rc = SA_AIS_OK; > > > > + SaVersionT local_version = kImmVersion; > > > > int rc = 0; > > > > > > > > TRACE_ENTER(); > > > > @@ -705,7 +707,8 @@ static int applier_init(SaImmOiHandleT > > > > *imm_appl_hdl, > > > > } > > > > > > > > /* Initialize OI for applier and get OI handle */ > > > > - ais_rc = immutil_saImmOiInitialize_2(imm_appl_hdl, &callbacks, > > > > &kImmVersion); > > > > + ais_rc = immutil_saImmOiInitialize_2(imm_appl_hdl, &callbacks, > > > > + &local_version); > > > > if (ais_rc != SA_AIS_OK) { > > > > LOG_WA("immutil_saImmOiInitialize_2 Failed %s", saf_error(ais_rc)); > > > > rc = -1; > > > > diff --git a/src/osaf/immutil/immutil.c b/src/osaf/immutil/immutil.c > > > > index 1add1d0..e10a8ff 100644 > > > > --- a/src/osaf/immutil/immutil.c > > > > +++ b/src/osaf/immutil/immutil.c > > > > @@ -610,8 +610,9 @@ SaImmClassNameT > immutil_get_className(const > > > > SaNameT *objectName) > > > > SaImmAccessorHandleT accessorHandle; > > > > SaImmAttrValuesT_2 **attributes; > > > > SaImmAttrNameT attributeNames[] = {"SaImmAttrClassName", > > > > NULL}; > > > > + SaVersionT localVer = immVersion; > > > > > > > > - if (immutil_saImmOmInitialize(&omHandle, NULL, &immVersion) != > > > > + if (immutil_saImmOmInitialize(&omHandle, NULL, &localVer) != > > > > SA_AIS_OK) > > > > goto done; > > > > if (immutil_saImmOmAccessorInitialize(omHandle, &accessorHandle) > > > > != > > > > @@ -639,9 +640,10 @@ SaAisErrorT immutil_get_attrValueType(const > > > > SaImmClassNameT className, > > > > SaImmClassCategoryT classCategory; > > > > SaImmAttrDefinitionT_2 *attrDef; > > > > SaImmAttrDefinitionT_2 **attrDefinitions; > > > > + SaVersionT localVer = immVersion; > > > > int i = 0; > > > > > > > > - if ((rc = immutil_saImmOmInitialize(&omHandle, NULL, > > > > &immVersion)) != > > > > + if ((rc = immutil_saImmOmInitialize(&omHandle, NULL, &localVer)) != > > > > SA_AIS_OK) { > > > > return rc; > > > > } > > > > @@ -1083,7 +1085,7 @@ struct ImmutilWrapperProfile > > > > immutilWrapperProfile = {1, 25, 400}; > > > > SaAisErrorT > > > > immutil_saImmOiInitialize_2(SaImmOiHandleT *immOiHandle, > > > > const SaImmOiCallbacksT_2 *immOiCallbacks, > > > > - const SaVersionT *version) > > > > + SaVersionT *version) > > > > { > > > > /* Version parameter is in/out i.e. must be mutable and should not > > > > be > > > > re-used from previous call in a retry loop. */ > > > > @@ -1100,6 +1102,8 @@ > immutil_saImmOiInitialize_2(SaImmOiHandleT > > > > *immOiHandle, > > > > saImmOiInitialize_2(immOiHandle, immOiCallbacks, > > > > &localVer); > > > > nTries++; > > > > } > > > > + > > > > + *version = localVer; > > > > if (rc != SA_AIS_OK && immutilWrapperProfile.errorsAreFatal) > > > > immutilError("saImmOiInitialize FAILED, rc = %d", (int)rc); > > > > return rc; > > > > @@ -1108,7 +1112,7 @@ > immutil_saImmOiInitialize_2(SaImmOiHandleT > > > > *immOiHandle, > > > > SaAisErrorT > > > > immutil_saImmOiInitialize_o3(SaImmOiHandleT *immOiHandle, > > > > const SaImmOiCallbacksT_o3 *immOiCallbacks, > > > > - const SaVersionT *version) > > > > + SaVersionT *version) > > > > { > > > > /* Version parameter is in/out i.e. must be mutable and should not > > > > be > > > > re-used from previous call in a retry loop. */ > > > > @@ -1125,6 +1129,8 @@ > immutil_saImmOiInitialize_o3(SaImmOiHandleT > > > > *immOiHandle, > > > > &localVer); > > > > nTries++; > > > > } > > > > + > > > > + *version = localVer; > > > > if (rc != SA_AIS_OK && immutilWrapperProfile.errorsAreFatal) > > > > immutilError("saImmOiInitialize_o3 FAILED, rc = %d", > > (int)rc); > > > > return rc; > > > > @@ -1515,7 +1521,7 @@ SaAisErrorT > > > immutil_saImmOiAugmentCcbInitialize( > > > > > > > > SaAisErrorT immutil_saImmOmInitialize(SaImmHandleT *immHandle, > > > > const SaImmCallbacksT *immCallbacks, > > > > - const SaVersionT *version) > > > > + SaVersionT *version) > > > > { > > > > /* Version parameter is in/out i.e. must be mutable and should not > > > > be > > > > re-used from previous call in a retry loop. */ > > > > @@ -1530,6 +1536,8 @@ SaAisErrorT > > > > immutil_saImmOmInitialize(SaImmHandleT *immHandle, > > > > rc = saImmOmInitialize(immHandle, immCallbacks, > > > > &localVer); > > > > nTries++; > > > > } > > > > + > > > > + *version = localVer; > > > > if (rc != SA_AIS_OK && immutilWrapperProfile.errorsAreFatal) > > > > immutilError("saImmOmInitialize FAILED, rc = %d", (int)rc); > > > > return rc; > > > > @@ -1553,6 +1561,8 @@ SaAisErrorT > > > > immutil_saImmOmInitialize_o2(SaImmHandleT *immHandle, > > > > rc = saImmOmInitialize_o2(immHandle, immCallbacks, > > > > &localVer); > > > > nTries++; > > > > } > > > > + > > > > + *version = localVer; > > > > if (rc != SA_AIS_OK && immutilWrapperProfile.errorsAreFatal) > > > > immutilError(" FAILED, rc = %d", (int)rc); > > > > return rc; > > > > diff --git a/src/osaf/immutil/immutil.h b/src/osaf/immutil/immutil.h > > > > index dc6449b..63e710f 100644 > > > > --- a/src/osaf/immutil/immutil.h > > > > +++ b/src/osaf/immutil/immutil.h > > > > @@ -421,11 +421,11 @@ struct ImmutilWrapperProfile { > > > > */ > > > > EXTERN_C SaAisErrorT immutil_saImmOiInitialize_2( > > > > SaImmOiHandleT *immOiHandle, const SaImmOiCallbacksT_2 > > > > *immOiCallbacks, > > > > - const SaVersionT *version); > > > > + SaVersionT *version); > > > > > > > > EXTERN_C SaAisErrorT immutil_saImmOiInitialize_o3( > > > > SaImmOiHandleT *immOiHandle, const SaImmOiCallbacksT_o3 > > > > *immOiCallbacks, > > > > - const SaVersionT *version); > > > > + SaVersionT *version); > > > > > > > > EXTERN_C SaAisErrorT immutil_saImmOiSelectionObjectGet( > > > > SaImmOiHandleT immOiHandle, SaSelectionObjectT > *selectionObject); > > > > @@ -500,7 +500,7 @@ EXTERN_C SaAisErrorT > > > > immutil_saImmOiAugmentCcbInitialize( > > > > > > > > EXTERN_C SaAisErrorT immutil_saImmOmInitialize( > > > > SaImmHandleT *immHandle, const SaImmCallbacksT *immCallbacks, > > > > - const SaVersionT *version); > > > > + SaVersionT *version); > > > > > > > > EXTERN_C SaAisErrorT immutil_saImmOmInitialize_o2( > > > > SaImmHandleT *immHandle, const SaImmCallbacksT_o2 > > *immCallbacks, > > > > diff --git a/src/smf/smfd/SmfAdminState.cc > > > > b/src/smf/smfd/SmfAdminState.cc > > > > index 9508447..52bdf4b 100644 > > > > --- a/src/smf/smfd/SmfAdminState.cc > > > > +++ b/src/smf/smfd/SmfAdminState.cc > > > > @@ -264,12 +264,13 @@ done: > > > > // > > > > bool SmfAdminStateHandler::initImmOmAndSetAdminOwnerName() { > > > > SaAisErrorT ais_rc = SA_AIS_ERR_TRY_AGAIN; > > > > + SaVersionT local_version = immVersion_; > > > > int timeout_try_cnt = 6; > > > > bool rc = true; > > > > > > > > // OM handle > > > > while (timeout_try_cnt > 0) { > > > > - ais_rc = immutil_saImmOmInitialize(&omHandle_, NULL, > > > &immVersion_); > > > [Lennart] This is another example of when local_version has to be set > > again. > > > Here immutil_saImmOmInitialize() may be called several times and > > > local_version has to be set every time > > > > + ais_rc = immutil_saImmOmInitialize(&omHandle_, NULL, > > > &local_version); > > > > if (ais_rc != SA_AIS_ERR_TIMEOUT) break; > > > > timeout_try_cnt--; > > > > } > > > > @@ -973,4 +974,3 @@ bool > > > > SmfAdminStateHandler::adminOperation(SaAmfAdminOperationIdT > > > > adminOperation, > > > > TRACE_LEAVE2("rc=%d", rc); > > > > return rc; > > > > } > > > > - > > > > diff --git a/src/smf/smfd/SmfExecControlHdl.cc > > > > b/src/smf/smfd/SmfExecControlHdl.cc > > > > index e97b765..bb5f9a5 100644 > > > > --- a/src/smf/smfd/SmfExecControlHdl.cc > > > > +++ b/src/smf/smfd/SmfExecControlHdl.cc > > > > @@ -373,6 +373,7 @@ bool > > > > SmfExecControlObjHandler::copyExecControlObject() { > > > > */ > > > > bool SmfExecControlObjHandler::createImmOmHandles() { > > > > SaAisErrorT ais_rc = SA_AIS_ERR_TRY_AGAIN; > > > > + SaVersionT local_version = m_immVersion; > > > > int timeout_try_cnt = 6; > > > > bool rc = true; > > > > > > > > @@ -382,7 +383,7 @@ bool > > > > SmfExecControlObjHandler::createImmOmHandles() { > > > > > > > > // OM handle > > > > while (timeout_try_cnt > 0) { > > > > - ais_rc = immutil_saImmOmInitialize(&m_omHandle, NULL, > > > > &m_immVersion); > > > > + ais_rc = immutil_saImmOmInitialize(&m_omHandle, NULL, > > > > &local_version); > > > > if (ais_rc != SA_AIS_ERR_TIMEOUT) break; > > > > timeout_try_cnt--; > > > > } > > > > -- > > > > 1.9.1 > > ------------------------------------------------------------------------------ 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