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