Looks good. Ack.

-----Original Message-----
From: Thien Minh Huynh <thien.m.hu...@dektech.com.au> 
Sent: Friday, April 7, 2023 2:22 PM
To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Dat Tran Quoc Phan 
<dat.tq.p...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net; Thien Minh Huynh 
<thien.m.hu...@dektech.com.au>
Subject: [PATCH 1/1] log: check the queue capacity before retrieving an item 
[#3334]

Osaflogd occasionally fails to keep synchronization in a pair of nodes.
When received a pop request from active, standby will be coredump if retrieving 
a piece from an empty queue.

This is done to avoid coredump by checking the queue capacity before retrieving 
an item.
---
 src/log/logd/lgs_mbcsv_v8.cc | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/log/logd/lgs_mbcsv_v8.cc b/src/log/logd/lgs_mbcsv_v8.cc index 
289a4f610..97671cf40 100644
--- a/src/log/logd/lgs_mbcsv_v8.cc
+++ b/src/log/logd/lgs_mbcsv_v8.cc
@@ -205,6 +205,9 @@ uint32_t ckpt_proc_push_async(lgs_cb_t* cb, void* data) {  
uint32_t ckpt_proc_pop_async(lgs_cb_t* cb, void* data) {
   TRACE_ENTER();
   assert(lgs_is_peer_v8() && "The peer should run with V8 or beyond!");
+  if (Cache::instance()->Size() == 0) {
+    return NCSCC_RC_FAILURE;
+  }
   auto data_v8 = static_cast<lgsv_ckpt_msg_v8_t*>(data);
   auto param = &data_v8->ckpt_rec.pop_async;
   uint64_t seq_id = param->seq_id;
@@ -225,6 +228,11 @@ uint32_t ckpt_proc_pop_write_async(lgs_cb_t* cb, void* 
data) {
   assert(lgs_is_peer_v8() && "The peer should run with V8 or beyond!");
   auto data_v8 = static_cast<lgsv_ckpt_msg_v8_t*>(data);
   auto param = &data_v8->ckpt_rec.pop_and_write_async;
+  if (Cache::instance()->Size() == 0) {
+    lgs_free_edu_mem(param->log_record);
+    lgs_free_edu_mem(param->log_file);
+    return NCSCC_RC_FAILURE;
+  }
   uint64_t seq_id = param->seq_id;
   auto top = Cache::instance()->Front();
   if (top->seq_id_ != seq_id) {
--
2.40.0



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to