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. (*) 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`. > > > > 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