Hi,

Do you have any comments on this patch? Thanks. 

Regards, Vu

> -----Original Message-----
> From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au]
> Sent: Thursday, April 5, 2018 5:39 PM
> To: ravisekhar.ko...@oracle.com; hans.nordeb...@ericsson.com;
> anders.wid...@ericsson.com; 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;
>    }
> 
>    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_);
> +    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