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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel