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

Reply via email to