Thanks Lennart. I will update the code as your comments before pushing.

@Ravi: Any comment from you? Thanks.

Regards, Vu

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



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to