Hi Vu,

ACK.

-AVM


On 8/8/2017 3:01 PM, Vu Minh Nguyen wrote:
Log application got coredump due to failed assertion in Log agent.
The problem was caused by referring to uninitialized variable `bool updated`.

Previously, `updated` variable was initialized when the method
`FetchAndIncreaseRefCounter` or `FetchAndDecreaseRefCounter` was called.

The value of `updated` is true, means the reference counter has been updated,
false otherwise. So, if `updated` variable was unluckily assigned `true`
in default, reference counter could be restored unexpectedly.
---
  src/log/agent/lga_agent.cc | 12 ++++++------
  src/log/agent/lga_mds.cc   |  2 +-
  2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/log/agent/lga_agent.cc b/src/log/agent/lga_agent.cc
index fe94b58..c6ca331 100644
--- a/src/log/agent/lga_agent.cc
+++ b/src/log/agent/lga_agent.cc
@@ -411,7 +411,7 @@ SaAisErrorT LogAgent::saLogSelectionObjectGet(
      SaLogHandleT logHandle, SaSelectionObjectT* selectionObject) {
    SaAisErrorT ais_rc = SA_AIS_OK;
    LogClient* client = nullptr;
-  bool updated;
+  bool updated = false;
TRACE_ENTER(); @@ -461,7 +461,7 @@ SaAisErrorT LogAgent::saLogSelectionObjectGet(
  SaAisErrorT LogAgent::saLogDispatch(SaLogHandleT logHandle,
                                      SaDispatchFlagsT dispatchFlags) {
    LogClient* client = nullptr;
-  bool updated;
+  bool updated = false;
    SaAisErrorT ais_rc;
TRACE_ENTER();
@@ -554,7 +554,7 @@ SaAisErrorT LogAgent::SendFinalizeMsg(uint32_t client_id) {
SaAisErrorT LogAgent::saLogFinalize(SaLogHandleT logHandle) {
    LogClient* client = nullptr;
-  bool updated;
+  bool updated = false;
    bool is_locked = false;
    SaAisErrorT ais_rc = SA_AIS_OK;
@@ -804,7 +804,7 @@ SaAisErrorT LogAgent::saLogStreamOpen_2(
    SaLogHeaderTypeT log_header_type = SA_LOG_NTF_HEADER;
    bool is_locked = false;
    SaConstStringT streamName;
-  bool updated;
+  bool updated = false;
TRACE_ENTER(); @@ -1114,7 +1114,7 @@ SaAisErrorT LogAgent::saLogWriteLogAsync(SaLogStreamHandleT logStreamHandle,
    char logSvcUsrName[kOsafMaxDnLength] = {0};
    bool is_locked = false;
    SaNameT tmpSvcUsrName;
-  bool cUpdated, sUpdated;
+  bool cUpdated = false, sUpdated = false;
TRACE_ENTER(); @@ -1284,7 +1284,7 @@ SaAisErrorT LogAgent::saLogStreamClose(SaLogStreamHandleT logStreamHandle) {
    SaAisErrorT ais_rc = SA_AIS_OK;
    uint32_t mds_rc;
    bool is_locked = false;
-  bool sUpdated, cUpdated;
+  bool sUpdated = false, cUpdated = false;
TRACE_ENTER(); diff --git a/src/log/agent/lga_mds.cc b/src/log/agent/lga_mds.cc
index 78bd7e1..e40adae 100644
--- a/src/log/agent/lga_mds.cc
+++ b/src/log/agent/lga_mds.cc
@@ -521,7 +521,7 @@ static uint32_t lga_lgs_msg_proc(lgsv_msg_t *lgsv_msg,
    }
// @client is being deleted in other thread. DO NOT touch this.
-  bool updated;
+  bool updated = false;
    if (client->FetchAndIncreaseRefCounter(&updated) == -1) {
      LogAgent::instance().LeaveCriticalSection();
      lga_msg_destroy(lgsv_msg);


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