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.
>    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;
> 
>      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

Reply via email to