Hi Lennart,

I played around with the patch and some comments below:

1) For the below cases, if the OM is not yet supporting printing of error 
strings from OI, then 
On top of saImmOiCcbSetErrorString(), We may also want to print the error 
messages aditionally to syslog,

+               TRACE("logStreamSystemHighLimit validation Fail");
+                       TRACE("logStreamSystemLowLimit validation Fail");
+                       TRACE("logStreamAppHighLimit validation Fail");
+                       TRACE("logStreamAppLowLimit validation Fail");
+                       TRACE("Cannot change attributes. Not supported by 
standby");

2) In, lgs_imm_rootpathconf_set()

we could avoid the error string "lgsv root path is changed to "
i.e. when i try to change the root directory, then the following multiple error 
strings are observed, we could avoid one of them:

Aug  5 18:19:12 SC-1 local0.err osaflogd[397]: ER Old log files could not be 
renamed and closed, root-dir: /repl_opensaf/saflog
Aug  5 18:19:12 SC-1 local0.err osaflogd[397]: ER Old log files could not be 
renamed and closed, root-dir: /repl_opensaf/saflog
Aug  5 18:19:12 SC-1 local0.notice osaflogd[397]: NO lgsv root path is changed 
to "/repl_opensaf/mathi"
Aug  5 18:19:12 SC-1 local0.notice osaflogd[397]: NO Log root directory changed 
to: /repl_opensaf/mathi

3) In the case when highlimit is equal to low limit, should we really consider 
that as an error?

 error - saImmOmCcbApply FAILED: SA_AIS_ERR_FAILED_OPERATION (21)
OI reports: HIGH limit <= LOW limit


Thanks,
Mathi.

>-----Original Message-----
>From: Lennart Lund [mailto:[email protected]]
>Sent: Thursday, June 26, 2014 5:34 PM
>To: Mathivanan Naickan Palanivelu
>Cc: [email protected]
>Subject: [PATCH 1 of 3] log: Make limit settings in config object runtime
>configurable [#921]
>
> osaf/services/saf/logsv/lgs/lgs.h      |    3 +
> osaf/services/saf/logsv/lgs/lgs_imm.c  |  223
>+++++++++++++++++++++++++++++---
> osaf/services/saf/logsv/lgs/lgs_main.c |   39 ++++-
> osaf/services/saf/logsv/lgs/lgs_mds.c  |   21 ++-
> 4 files changed, 249 insertions(+), 37 deletions(-)
>
>
>Make the high and low limit settings i the configuration object
>possible to change in runtime.
>- Validate and accept changes
>- Apply changes (on active only)
>
>diff --git a/osaf/services/saf/logsv/lgs/lgs.h
>b/osaf/services/saf/logsv/lgs/lgs.h
>--- a/osaf/services/saf/logsv/lgs/lgs.h
>+++ b/osaf/services/saf/logsv/lgs/lgs.h
>@@ -113,6 +113,9 @@ extern uint32_t mbox_high[NCS_IPC_PRIORI
> extern uint32_t mbox_msgs[NCS_IPC_PRIORITY_MAX];
> extern bool mbox_full[NCS_IPC_PRIORITY_MAX];
> extern uint32_t mbox_low[NCS_IPC_PRIORITY_MAX];
>+extern pthread_mutex_t lgs_mbox_init_mutex;
>+
>+extern uint32_t lgs_configure_mailbox(void);
>
> extern uint32_t lgs_amf_init(lgs_cb_t *);
> extern uint32_t lgs_mds_init(lgs_cb_t *cb);
>diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.c
>b/osaf/services/saf/logsv/lgs/lgs_imm.c
>--- a/osaf/services/saf/logsv/lgs/lgs_imm.c
>+++ b/osaf/services/saf/logsv/lgs/lgs_imm.c
>@@ -149,6 +149,8 @@ static void report_oi_error(SaImmOiHandl
> static void report_om_error(SaImmOiHandleT immOiHandle, SaInvocationT
>invocation,
>               const char *format, ...) __attribute__ ((format(printf, 3, 4)));
>
>+static SaAisErrorT read_logsv_config_obj(const char *dn, lgs_conf_t
>*lgsConf);
>+
> /**
>  * To be used in OI callbacks to report errors by setting an error string
>  * Also writes the same error string using TRACE
>@@ -618,6 +620,140 @@ static SaAisErrorT config_ccb_completed_
>       return rc;
> }
>
>+/* =================================================
>+ * config_ccb_completed_modify() with help functions
>+ * =================================================
>+ */
>+struct vattr_t {
>+      /* true if any of the attributes has been changed */
>+      bool validate_flag;
>+      SaUint32T logStreamSystemHighLimit;
>+      /* true if this attribute has been changed */
>+      bool logStreamSystemHighLimit_changed;
>+      SaUint32T logStreamSystemLowLimit;
>+      bool logStreamSystemLowLimit_changed;
>+      SaUint32T logStreamAppHighLimit;
>+      bool logStreamAppHighLimit_changed;
>+      SaUint32T logStreamAppLowLimit;
>+      bool logStreamAppLowLimit_changed;
>+};
>+
>+/**
>+ * Compare high and low and return true if:
>+ *  - high > low
>+ *  - high = low = 0
>+ * else return false
>+ *
>+ * @param low
>+ * @param high
>+ * @return true if valid
>+ */
>+static bool valid_limits(SaUint32T low, SaUint32T high)
>+{
>+      bool rc = true;
>+      if ( !((low == 0) && (high == 0)) ) {
>+              /* Allow both values to be 0 */
>+              if (low >= high) {
>+                      rc = false;
>+              }
>+      }
>+
>+      return rc;
>+}
>+
>+/**
>+ * Validate attributes:
>+ * Must be done after all attributes has been read in order to check against
>+ * the correct value.
>+ * Check that no low limit >= corresponding high limit
>+ * Both high and low limit can be 0
>+ * If corresponding limit is not changed, check against current setting
>+ *
>+ * @param vattr [i] struct with attributes to validate
>+ * @param err_str [out] char vector of 256 bytes to return a string.
>+ * @return error code
>+ */
>+static SaAisErrorT validate_config_ccb_completed_modify(struct vattr_t
>vattr, char *err_str)
>+{
>+      SaUint32T value32_high = 0;
>+      SaUint32T value32_low = 0;
>+      SaAisErrorT rc = SA_AIS_OK;
>+
>+      TRACE_ENTER();
>+
>+      if (vattr.logStreamSystemHighLimit_changed) {
>+              value32_high = vattr.logStreamSystemHighLimit;
>+              if (vattr.logStreamSystemLowLimit_changed) {
>+                      value32_low = vattr.logStreamSystemLowLimit;
>+              } else {
>+                      value32_low = *(SaUint32T *) lgs_imm_logconf_get(
>+
>       LGS_IMM_LOG_STREAM_SYSTEM_LOW_LIMIT, NULL);
>+              }
>+
>+              if (!valid_limits(value32_low, value32_high)) {
>+                      rc = SA_AIS_ERR_BAD_OPERATION;
>+                      snprintf(err_str, 256, "HIGH limit <= LOW limit");
>+                      TRACE("logStreamSystemHighLimit validation Fail");
>+                      goto done;
>+              }
>+      }
>+
>+      if (vattr.logStreamSystemLowLimit_changed) {
>+              value32_low = vattr.logStreamSystemLowLimit;
>+              if (vattr.logStreamSystemHighLimit_changed) {
>+                      value32_high = vattr.logStreamSystemHighLimit;
>+              } else {
>+                      value32_high = *(SaUint32T *) lgs_imm_logconf_get(
>+
>       LGS_IMM_LOG_STREAM_SYSTEM_HIGH_LIMIT, NULL);
>+              }
>+
>+              if (!valid_limits(value32_low, value32_high)) {
>+                      rc = SA_AIS_ERR_BAD_OPERATION;
>+                      snprintf(err_str, 256, "HIGH limit <= LOW limit");
>+                      TRACE("logStreamSystemLowLimit validation Fail");
>+                      goto done;
>+              }
>+      }
>+
>+      if (vattr.logStreamAppHighLimit_changed) {
>+              value32_high = vattr.logStreamAppHighLimit;
>+              if (vattr.logStreamAppLowLimit_changed) {
>+                      value32_low = vattr.logStreamAppLowLimit;
>+              } else {
>+                      value32_low = *(SaUint32T *) lgs_imm_logconf_get(
>+
>       LGS_IMM_LOG_STREAM_APP_LOW_LIMIT, NULL);
>+              }
>+
>+              if (!valid_limits(value32_low, value32_high)) {
>+                      rc = SA_AIS_ERR_BAD_OPERATION;
>+                      snprintf(err_str, 256, "HIGH limit <= LOW limit");
>+                      TRACE("logStreamAppHighLimit validation Fail");
>+                      goto done;
>+              }
>+      }
>+
>+      if (vattr.logStreamAppLowLimit_changed) {
>+              value32_low = vattr.logStreamAppLowLimit;
>+              if (vattr.logStreamAppHighLimit_changed) {
>+                      value32_high = vattr.logStreamAppHighLimit;
>+              } else {
>+                      value32_high = *(SaUint32T *) lgs_imm_logconf_get(
>+
>       LGS_IMM_LOG_STREAM_APP_HIGH_LIMIT, NULL);
>+              }
>+
>+              if (!valid_limits(value32_low, value32_high)) {
>+                      rc = SA_AIS_ERR_BAD_OPERATION;
>+                      snprintf(err_str, 256, "HIGH limit <= LOW limit");
>+                      TRACE("logStreamAppLowLimit validation Fail");
>+                      goto done;
>+              }
>+      }
>+
>+      done:
>+      TRACE_LEAVE2("rc = %d", rc);
>+      return rc;
>+}
>+
> /**
>  * Modification of attributes in log service configuration object.
>  * Only logRootDirectory can be modified
>@@ -632,6 +768,20 @@ static SaAisErrorT config_ccb_completed_
>       const SaImmAttrModificationT_2 *attrMod;
>       SaAisErrorT rc = SA_AIS_OK;
>       int i = 0;
>+
>+      struct vattr_t vattr = {
>+              .validate_flag = false,
>+              .logStreamSystemHighLimit = 0,
>+              .logStreamSystemHighLimit_changed = false,
>+              .logStreamSystemLowLimit = 0,
>+              .logStreamSystemLowLimit_changed = false,
>+              .logStreamAppHighLimit = 0,
>+              .logStreamAppHighLimit_changed = false,
>+              .logStreamAppLowLimit = 0,
>+              .logStreamAppLowLimit_changed = false,
>+      };
>+
>+      char oi_err_str[256];
>
>       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata-
>>objectName.value);
>
>@@ -667,25 +817,25 @@ static SaAisErrorT config_ccb_completed_
>                       rc = SA_AIS_ERR_FAILED_OPERATION;
>                       goto done;
>               } else if (!strcmp(attribute->attrName,
>"logStreamSystemHighLimit")) {
>-                      report_oi_error(immOiHandle, opdata->ccbId,
>-                                      "%s cannot be changed", attribute-
>>attrName);
>-                      rc = SA_AIS_ERR_FAILED_OPERATION;
>-                      goto done;
>+                      vattr.logStreamSystemHighLimit = *((SaUint32T
>*)value);
>+                      vattr.logStreamSystemHighLimit_changed = true;
>+                      TRACE("%s %s = %d",__FUNCTION__, attribute-
>>attrName,
>+                                      vattr.logStreamSystemHighLimit);
>               } else if (!strcmp(attribute->attrName,
>"logStreamSystemLowLimit")) {
>-                      report_oi_error(immOiHandle, opdata->ccbId,
>-                                      "%s cannot be changed", attribute-
>>attrName);
>-                      rc = SA_AIS_ERR_FAILED_OPERATION;
>-                      goto done;
>+                      vattr.logStreamSystemLowLimit = *((SaUint32T
>*)value);
>+                      vattr.logStreamSystemLowLimit_changed = true;
>+                      TRACE("%s %s = %d",__FUNCTION__, attribute-
>>attrName,
>+                                      vattr.logStreamSystemHighLimit);
>               } else if (!strcmp(attribute->attrName,
>"logStreamAppHighLimit")) {
>-                      report_oi_error(immOiHandle, opdata->ccbId,
>-                                      "%s cannot be changed", attribute-
>>attrName);
>-                      rc = SA_AIS_ERR_FAILED_OPERATION;
>-                      goto done;
>+                      vattr.logStreamAppHighLimit = *((SaUint32T *)value);
>+                      vattr.logStreamAppHighLimit_changed = true;
>+                      TRACE("%s %s = %d",__FUNCTION__, attribute-
>>attrName,
>+                                      vattr.logStreamSystemHighLimit);
>               } else if (!strcmp(attribute->attrName,
>"logStreamAppLowLimit")) {
>-                      report_oi_error(immOiHandle, opdata->ccbId,
>-                                      "%s cannot be changed", attribute-
>>attrName);
>-                      rc = SA_AIS_ERR_FAILED_OPERATION;
>-                      goto done;
>+                      vattr.logStreamAppLowLimit = *((SaUint32T *)value);
>+                      vattr.logStreamAppLowLimit_changed = true;
>+                      TRACE("%s %s = %d",__FUNCTION__, attribute-
>>attrName,
>+                                      vattr.logStreamSystemHighLimit);
>               } else if (!strcmp(attribute->attrName,
>"logMaxApplicationStreams")) {
>                       report_oi_error(immOiHandle, opdata->ccbId,
>                                       "%s cannot be changed", attribute-
>>attrName);
>@@ -710,7 +860,13 @@ static SaAisErrorT config_ccb_completed_
>
>               attrMod = opdata->param.modify.attrMods[i++];
>       }
>-
>+
>+      rc = validate_config_ccb_completed_modify(vattr, oi_err_str);
>+      if (rc != SA_AIS_OK) {
>+              TRACE("Reporting oi error \"%s\"", oi_err_str);
>+              report_oi_error(immOiHandle, opdata->ccbId, "%s",
>oi_err_str);
>+      }
>+
> done:
>       TRACE_LEAVE2("rc=%u", rc);
>       return rc;
>@@ -1176,6 +1332,9 @@ static void config_ccb_apply_modify(cons
> {
>       const SaImmAttrModificationT_2 *attrMod;
>       int i = 0;
>+      bool checkpoint_flag = false;
>+      bool mbox_cfg_flag = false;
>+      lgs_conf_t *lgs_conf_p = (lgs_conf_t *) lgs_conf;
>
>       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, opdata-
>>objectName.value);
>
>@@ -1202,16 +1361,34 @@ static void config_ccb_apply_modify(cons
>                       lgs_conf->chkp_file_close_time = cur_time;
>
>                       LOG_NO("Log root directory changed to: %s", lgs_cb-
>>logsv_root_dir);
>-              } else {
>-                      // validation should not allow any other change
>-                      osafassert(0);
>+                      checkpoint_flag = true;
>+              } else if (!strcmp(attribute->attrName,
>"logStreamSystemHighLimit")) {
>+                      mbox_cfg_flag = true;
>+              } else if (!strcmp(attribute->attrName,
>"logStreamSystemLowLimit")) {
>+                      mbox_cfg_flag = true;
>+              } else if (!strcmp(attribute->attrName,
>"logStreamAppHighLimit")) {
>+                      mbox_cfg_flag = true;
>+              } else if (!strcmp(attribute->attrName,
>"logStreamAppLowLimit")) {
>+                      mbox_cfg_flag = true;
>               }
>-
>+
>               attrMod = opdata->param.modify.attrMods[i++];
>       }
>+
>+      if (mbox_cfg_flag == true) {
>+              /* If any mailbox queue limits has changed the new
>configuration has to
>+               * be read and the mailbox reconfigured.
>+               * Standby has to be notified.
>+               */
>+              TRACE("%s - Update mailbox", __FUNCTION__);
>+              (void)
>read_logsv_config_obj(LGS_IMM_LOG_CONFIGURATION, lgs_conf_p);
>+              (void) lgs_configure_mailbox();
>+      }
>
>-      /* Check pointing lgs configuration change */
>-      ckpt_lgs_cfg(lgs_conf);
>+      if (checkpoint_flag == true) {
>+              /* Check pointing lgs configuration change */
>+              ckpt_lgs_cfg(lgs_conf);
>+      }
>
>       TRACE_LEAVE();
> }
>diff --git a/osaf/services/saf/logsv/lgs/lgs_main.c
>b/osaf/services/saf/logsv/lgs/lgs_main.c
>--- a/osaf/services/saf/logsv/lgs/lgs_main.c
>+++ b/osaf/services/saf/logsv/lgs/lgs_main.c
>@@ -38,6 +38,7 @@
> #include "lgs.h"
> #include "lgs_util.h"
> #include "lgs_file.h"
>+#include "osaf_utility.h"
>
> /*
>===========================================================
>=============
>  *   DEFINITIONS
>@@ -80,6 +81,12 @@ bool mbox_full[NCS_IPC_PRIORITY_MAX];
> /* Lower limit which determines when to leave FULL state */
> uint32_t mbox_low[NCS_IPC_PRIORITY_MAX];
>
>+/* The mailbox and mailbox handling variables (limits) may be reinitialized
>+ * in runtime. This happen in the main thread. The mailbox and variables are
>+ * used in the mds thread.
>+ */
>+pthread_mutex_t lgs_mbox_init_mutex = PTHREAD_MUTEX_INITIALIZER;
>+
> static struct pollfd fds[5];
> static nfds_t nfds = 5;
> static NCS_SEL_OBJ usr1_sel_obj;
>@@ -135,21 +142,29 @@ static void sigusr1_handler(int sig)
> }
>
> /**
>- * Configure mailbox properties from environment variables
>+ * Configure mailbox properties from configuration variables
>  * Low limit is by default configured as a percentage of the
>  * high limit (if not configured explicitly).
>  *
>  * @return uint32_t
>  */
>-static uint32_t configure_mailbox(void)
>+uint32_t lgs_configure_mailbox(void)
> {
>       uint32_t limit = 0;
>       bool errorflag;
>+      uint32_t rc = NCSCC_RC_SUCCESS;
>
>+      TRACE_ENTER();
>+      /* Do not initialize if the mailbox is being used in the mds thread. 
>Wait
>+       * until done.
>+       */
>+      osaf_mutex_lock_ordie(&lgs_mbox_init_mutex);
>+
>       limit = *(uint32_t*)
>lgs_imm_logconf_get(LGS_IMM_LOG_STREAM_SYSTEM_HIGH_LIMIT,
>&errorflag);
>       if (errorflag != false) {
>               LOG_ER("Illegal value for LOG_STREAM_SYSTEM_HIGH_LIMIT
>- %s", strerror(errno));
>-              return NCSCC_RC_FAILURE;
>+              rc = NCSCC_RC_FAILURE;
>+              goto done;
>       }
>
>       mbox_high[LGS_IPC_PRIO_SYS_STREAM] = limit;
>@@ -164,7 +179,8 @@ static uint32_t configure_mailbox(void)
>               limit = *(uint32_t*)
>lgs_imm_logconf_get(LGS_IMM_LOG_STREAM_SYSTEM_LOW_LIMIT,
>&errorflag);
>               if (errorflag != false) {
>                       LOG_ER("Illegal value for
>LOG_STREAM_SYSTEM_LOW_LIMIT - %s", strerror(errno));
>-                      return NCSCC_RC_FAILURE;
>+                      rc = NCSCC_RC_FAILURE;
>+                      goto done;
>               }
>
>               mbox_low[LGS_IPC_PRIO_SYS_STREAM] = limit;
>@@ -173,7 +189,8 @@ static uint32_t configure_mailbox(void)
>       limit = *(uint32_t*)
>lgs_imm_logconf_get(LGS_IMM_LOG_STREAM_APP_HIGH_LIMIT,
>&errorflag);
>       if (errorflag != false) {
>               LOG_ER("Illegal value for LOG_STREAM_APP_HIGH_LIMIT -
>%s", strerror(errno));
>-              return NCSCC_RC_FAILURE;
>+              rc = NCSCC_RC_FAILURE;
>+              goto done;
>       }
>
>       mbox_high[LGS_IPC_PRIO_APP_STREAM] = limit;
>@@ -188,7 +205,8 @@ static uint32_t configure_mailbox(void)
>               limit = *(uint32_t*)
>lgs_imm_logconf_get(LGS_IMM_LOG_STREAM_APP_HIGH_LIMIT,
>&errorflag);
>               if (errorflag != false) {
>                       LOG_ER("Illegal value for
>LOG_STREAM_APP_LOW_LIMIT - %s", strerror(errno));
>-                      return NCSCC_RC_FAILURE;
>+                      rc = NCSCC_RC_FAILURE;
>+                      goto done;
>               }
>
>               mbox_low[LGS_IPC_PRIO_APP_STREAM] = limit;
>@@ -197,7 +215,12 @@ static uint32_t configure_mailbox(void)
>       TRACE("sys low:%u, high:%u",
>mbox_low[LGS_IPC_PRIO_SYS_STREAM],
>mbox_high[LGS_IPC_PRIO_SYS_STREAM]);
>       TRACE("app low:%u, high:%u",
>mbox_low[LGS_IPC_PRIO_APP_STREAM],
>mbox_high[LGS_IPC_PRIO_APP_STREAM]);
>
>-      return NCSCC_RC_SUCCESS;
>+      osaf_mutex_unlock_ordie(&lgs_mbox_init_mutex);
>+
>+      done:
>+
>+      TRACE_LEAVE2("rc = %d", rc);
>+      return rc;
> }
>
> /**
>@@ -274,7 +297,7 @@ static uint32_t log_initialize(void)
>               goto done;
>       }
>
>-      if (configure_mailbox() != NCSCC_RC_SUCCESS) {
>+      if (lgs_configure_mailbox() != NCSCC_RC_SUCCESS) {
>               LOG_ER("configure_mailbox FAILED");
>               goto done;
>       }
>diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.c
>b/osaf/services/saf/logsv/lgs/lgs_mds.c
>--- a/osaf/services/saf/logsv/lgs/lgs_mds.c
>+++ b/osaf/services/saf/logsv/lgs/lgs_mds.c
>@@ -18,6 +18,7 @@
> #include <ncsencdec_pub.h>
> #include "lgs.h"
> #include "osaf_time.h"
>+#include "osaf_utility.h"
>
> #define LGS_SVC_PVT_SUBPART_VERSION 1
> #define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1
>@@ -879,9 +880,13 @@ static uint32_t mds_rcv(struct ncsmds_ca
>       const lgsv_api_info_t *api_info = &evt->info.msg.info.api_info;
>       lgsv_api_msg_type_t type = api_info->type;
>       NCS_IPC_PRIORITY prio = NCS_IPC_PRIORITY_LOW;
>-      uint32_t rc;
>+      uint32_t rc = NCSCC_RC_SUCCESS;
>       static unsigned long silently_discarded[NCS_IPC_PRIORITY_MAX];
>-
>+
>+      /* Wait if the mailbox is being reinitialized in the main thread.
>+       */
>+      osaf_mutex_lock_ordie(&lgs_mbox_init_mutex);
>+
>       evt->evt_type = LGSV_LGS_LGSV_MSG;
>       evt->cb_hdl = (uint32_t)mds_info->i_yr_svc_hdl;
>       evt->fr_node_id = mds_info->info.receive.i_node_id;
>@@ -894,7 +899,7 @@ static uint32_t mds_rcv(struct ncsmds_ca
>               osaf_clock_gettime(CLOCK_MONOTONIC, &evt-
>>entered_at);
>               rc = m_NCS_IPC_SEND(&lgs_mbx, evt,
>LGS_IPC_PRIO_CTRL_MSGS);
>               osafassert(rc == NCSCC_RC_SUCCESS);
>-              return NCSCC_RC_SUCCESS;
>+              goto done;
>       }
>
>       prio = getmboxprio(api_info);
>@@ -907,7 +912,7 @@ static uint32_t mds_rcv(struct ncsmds_ca
>                       rc = m_NCS_IPC_SEND(&lgs_mbx, evt,
>LGS_IPC_PRIO_CTRL_MSGS);
>                       osafassert(rc == NCSCC_RC_SUCCESS);
>               }
>-              return NCSCC_RC_SUCCESS;
>+              goto done;
>       }
>
>       /* Can we leave the mbox FULL state? */
>@@ -936,7 +941,7 @@ static uint32_t mds_rcv(struct ncsmds_ca
>       osafassert(api_info->type == LGSV_WRITE_LOG_ASYNC_REQ);
>
>       if (m_NCS_IPC_SEND(&lgs_mbx, evt, prio) == NCSCC_RC_SUCCESS) {
>-              return NCSCC_RC_SUCCESS;
>+              goto done;
>       } else {
>               mbox_full[prio] = true;
>               TRACE("FULL, msgs: %u, low: %u, high: %u",
>mbox_msgs[prio],
>@@ -955,7 +960,11 @@ static uint32_t mds_rcv(struct ncsmds_ca
> donefree:
>       lgs_free_write_log(&api_info->param.write_log_async);
>       free(evt);
>-      return NCSCC_RC_SUCCESS;
>+
>+done:
>+      osaf_mutex_unlock_ordie(&lgs_mbox_init_mutex);
>+
>+      return rc;
> }
>
>
>/**********************************************************
>******************

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to