ack, code review only. One minor comment below.

/Regards HansN


On 07/05/2017 10:45 AM, Gary Lee wrote:
---
  src/amf/amfnd/avnd_cb.h  |   3 +-
  src/amf/amfnd/avnd_di.h  |  36 ------
  src/amf/amfnd/avnd_mds.h |  11 +-
  src/amf/amfnd/di.cc      | 321 +++++++++++++++++++++--------------------------
  src/amf/amfnd/proxy.cc   |  19 ++-
  src/amf/amfnd/verify.cc  |  14 +--
  6 files changed, 167 insertions(+), 237 deletions(-)

diff --git a/src/amf/amfnd/avnd_cb.h b/src/amf/amfnd/avnd_cb.h
index 2d642c752..ff21e3108 100644
--- a/src/amf/amfnd/avnd_cb.h
+++ b/src/amf/amfnd/avnd_cb.h
@@ -33,6 +33,7 @@
  #ifndef AMF_AMFND_AVND_CB_H_
  #define AMF_AMFND_AVND_CB_H_
  #include <map>
+#include <vector>
typedef struct avnd_cb_tag {
    SYSF_MBX mbx; /* mailbox on which AvND waits */
@@ -99,7 +100,7 @@ typedef struct avnd_cb_tag {
     * Messages are removed when acked with the ACK message.
     * At director failover the list is scanned handling the
     * VERIFY message from the director and possibly resent again */
-  AVND_DND_LIST dnd_list;
+  std::vector<AVND_DND_MSG_LIST*> dnd_list;
AVND_TERM_STATE term_state;
    AVND_LED_STATE led_state;
diff --git a/src/amf/amfnd/avnd_di.h b/src/amf/amfnd/avnd_di.h
index d7ccd68fd..9870ad774 100644
--- a/src/amf/amfnd/avnd_di.h
+++ b/src/amf/amfnd/avnd_di.h
@@ -33,42 +33,6 @@
#include "amf/common/amf_si_assign.h" -/* macro to find the matching record (based on the msg-id) */
-/*
- * Caution!!! It is assumed that the msg-id is the 1st element in the message
- * structure. Ensure it. Else move the msg id to the common portion of the
- * message structure (outside the msg type specific contents).
- */
-#define m_AVND_DIQ_REC_FIND(cb, mid, o_rec)                               \
-  {                                                                       \
-    AVND_DND_LIST *list = &((cb)->dnd_list);                              \
-    for ((o_rec) = list->head;                                            \
-         (o_rec) &&                                                       \
-         !(*((uint32_t *)(&((o_rec)->msg.info.avd->msg_info))) == (mid)); \
-         (o_rec) = (o_rec)->next)                                         \
-      ;                                                                   \
-  }
-
-/* macro to find & pop a given record */
-#define m_AVND_DIQ_REC_FIND_POP(cb, rec)                 \
-  {                                                      \
-    AVND_DND_LIST *list = &((cb)->dnd_list);             \
-    AVND_DND_MSG_LIST *prv = list->head, *curr;          \
-    for (curr = list->head; curr && !(curr == (rec));    \
-         prv = curr, curr = curr->next)                  \
-      ;                                                  \
-    if (curr) {                                          \
-      if (curr == list->head) {                          \
-        list->head = curr->next;                         \
-        if (list->tail == curr) list->tail = list->head; \
-      } else {                                           \
-        prv->next = curr->next;                          \
-        if (list->tail == curr) list->tail = prv;        \
-      }                                                  \
-      curr->next = 0;                                    \
-    }                                                    \
-  }
-
  struct avnd_cb_tag;
uint32_t avnd_di_oper_send(struct avnd_cb_tag *, const AVND_SU *, uint32_t);
diff --git a/src/amf/amfnd/avnd_mds.h b/src/amf/amfnd/avnd_mds.h
index 70173acaa..8c81f7bb1 100644
--- a/src/amf/amfnd/avnd_mds.h
+++ b/src/amf/amfnd/avnd_mds.h
@@ -63,18 +63,13 @@ typedef struct avnd_msg {
    } info;
  } AVND_MSG;
-typedef struct avnd_dnd_msg_list_tag {
[HansN] perhaps use a struct instead of class (data only class)? See google style guide.
+class AVND_DND_MSG_LIST {
+public:
    AVND_MSG msg;
    AVND_TMR resp_tmr;
    uint32_t opq_hdl;
    uint16_t no_retries;
-  struct avnd_dnd_msg_list_tag *next;
-} AVND_DND_MSG_LIST;
-
-typedef struct avnd_dnd_list_tag {
-  AVND_DND_MSG_LIST *head;
-  AVND_DND_MSG_LIST *tail;
-} AVND_DND_LIST;
+};
/*****************************************************************************
                   Macros to fill the MDS message structure
diff --git a/src/amf/amfnd/di.cc b/src/amf/amfnd/di.cc
index 6f0a76cda..93350e62a 100644
--- a/src/amf/amfnd/di.cc
+++ b/src/amf/amfnd/di.cc
@@ -39,30 +39,7 @@
#include "base/logtrace.h"
  #include "amf/amfnd/avnd.h"
-
-/* macro to push the AvD msg parameters (to the end of the list) */
-#define m_AVND_DIQ_REC_PUSH(cb, rec)         \
-  {                                          \
-    AVND_DND_LIST *list = &((cb)->dnd_list); \
-    if (!(list->head))                       \
-      list->head = (rec);                    \
-    else                                     \
-      list->tail->next = (rec);              \
-    list->tail = (rec);                      \
-  }
-
-/* macro to pop the record (from the beginning of the list) */
-#define m_AVND_DIQ_REC_POP(cb, o_rec)            \
-  {                                              \
-    AVND_DND_LIST *list = &((cb)->dnd_list);     \
-    if (list->head) {                            \
-      (o_rec) = list->head;                      \
-      list->head = (o_rec)->next;                \
-      (o_rec)->next = 0;                         \
-      if (list->tail == (o_rec)) list->tail = 0; \
-    } else                                       \
-      (o_rec) = 0;                               \
-  }
+#include <algorithm>
static uint32_t avnd_node_oper_req(AVND_CB *cb, AVSV_PARAM_INFO *param) {
    uint32_t rc = NCSCC_RC_FAILURE;
@@ -460,7 +437,9 @@ uint32_t avnd_evt_tmr_rcv_msg_rsp_evh(AVND_CB *cb, AVND_EVT 
*evt) {
ncshm_give_hdl(tmr->opq_hdl);
    if (rec_tobe_deleted) {
-    m_AVND_DIQ_REC_FIND_POP(cb, rec);
+    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), rec);
+    osafassert(position != cb->dnd_list.end());
+    cb->dnd_list.erase(position);
      avnd_diq_rec_del(cb, rec);
    }
  done:
@@ -471,7 +450,6 @@ done:
  void avnd_send_node_up_msg(void) {
    AVND_CB *cb = avnd_cb;
    AVND_MSG msg = {};
-  AVND_DND_MSG_LIST *pending_rec = 0;
    uint32_t rc;
TRACE_ENTER();
@@ -487,8 +465,7 @@ void avnd_send_node_up_msg(void) {
    }
// We don't send node_up if it has already been sent and waiting for ACK
-  for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
-       pending_rec = pending_rec->next) {
+  for (auto pending_rec : cb->dnd_list) {
      if (pending_rec->msg.info.avd->msg_type == AVSV_N2D_NODE_UP_MSG) {
        TRACE(
            "Don't send another node_up since it has been sent and waiting for 
ack");
@@ -677,12 +654,11 @@ uint32_t avnd_evt_mds_avd_dn_evh(AVND_CB *cb, AVND_EVT 
*evt) {
if (cb->scs_absence_max_duration == 0) {
      // check for pending messages TO director
-    if ((cb->dnd_list.head != nullptr)) {
+    if ((cb->dnd_list.empty() == false)) {
        uint32_t no_pending_msg = 0;
-      AVND_DND_MSG_LIST *rec = 0;
-      for (rec = cb->dnd_list.head; rec != nullptr;
-           rec = rec->next, no_pending_msg++) {
+      for (auto rec : cb->dnd_list) {
          osafassert(rec->msg.type == AVND_MSG_AVD);
+        no_pending_msg++;
        }
/* Don't issue reboot if it has been already issued.*/
@@ -1115,7 +1091,9 @@ uint32_t avnd_di_msg_send(AVND_CB *cb, AVND_MSG *msg) {
  done:
    if (NCSCC_RC_SUCCESS != rc && rec) {
      /* pop & delete */
-    m_AVND_DIQ_REC_FIND_POP(cb, rec);
+    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), rec);
+    osafassert(position != cb->dnd_list.end());
+    cb->dnd_list.erase(position);
      avnd_diq_rec_del(cb, rec);
    }
    TRACE_LEAVE2("%u", rc);
@@ -1252,21 +1230,29 @@ uint32_t avnd_di_node_down_msg_send(AVND_CB *cb)
    Notes         : None.
  
******************************************************************************/
  void avnd_di_msg_ack_process(AVND_CB *cb, uint32_t mid) {
-  AVND_DND_MSG_LIST *rec = 0;
-
-  /* find & pop the matching record */
-  m_AVND_DIQ_REC_FIND(cb, mid, rec);
-  if (rec) {
-    if (rec->msg.info.avd->msg_type == AVSV_N2D_NODE_DOWN_MSG) {
-      // first to stop timer to avoid processing timeout event
-      // then perform last step clean up
-      avnd_stop_tmr(cb, &rec->resp_tmr);
-      avnd_last_step_clean(cb);
+  TRACE_ENTER2("%u", mid);
+
+  for (auto iter =  cb->dnd_list.begin(); iter != cb->dnd_list.end(); ++iter) {
+    auto rec = *iter;
+    osafassert(rec->msg.type == AVND_MSG_AVD);
+    const uint32_t msg_id = 
*(reinterpret_cast<uint32_t*>(&(rec->msg.info.avd->msg_info)));
+
+    // matching record
+    if (msg_id == mid) {
+      if (rec->msg.info.avd->msg_type == AVSV_N2D_NODE_DOWN_MSG) {
+        // first to stop timer to avoid processing timeout event
+        // then perform last step clean up
+        avnd_stop_tmr(cb, &rec->resp_tmr);
+        avnd_last_step_clean(cb);
+      }
+      cb->dnd_list.erase(iter);
+      TRACE("remove msg %u from queue", msg_id);
+      avnd_diq_rec_del(cb, rec);
+      break;
      }
-    m_AVND_DIQ_REC_FIND_POP(cb, rec);
-    avnd_diq_rec_del(cb, rec);
    }
+ TRACE_LEAVE2();
    return;
  }
@@ -1288,62 +1274,55 @@ void avnd_di_msg_ack_process(AVND_CB *cb, uint32_t mid) {
    Notes         : None.
  
******************************************************************************/
  void avnd_diq_rec_check_buffered_msg(AVND_CB *cb) {
-  if ((cb->dnd_list.head != nullptr)) {
-    AVND_DND_MSG_LIST *rec = 0;
-    bool found = true;
-    while (found) {
-      found = false;
-      for (rec = cb->dnd_list.head; rec != nullptr;) {
-        osafassert(rec->msg.type == AVND_MSG_AVD);
-        m_AVND_DIQ_REC_POP(cb, rec);
-        // Assignment response had been sent, but not ack because
-        // last controller go down, reset msg_id and will be resent later
-        if (rec->msg.info.avd->msg_type == AVSV_N2D_INFO_SU_SI_ASSIGN_MSG) {
-          if (rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id != 0) {
-            rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id = 0;
-            found = true;
-            LOG_NO(
-                "Found not-ack su_si_assign msg for SU:'%s', "
-                "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', "
-                "error:'%u', msg_id:'%u'",
-                osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
-                                               .n2d_su_si_assign.su_name),
-                osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
-                                               .n2d_su_si_assign.si_name),
-                rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
-                rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
-                rec->msg.info.avd->msg_info.n2d_su_si_assign
-                    .single_csi,
-                rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
-                rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
-          }
-          m_AVND_DIQ_REC_PUSH(cb, rec);
-          break;
-        } else if (rec->msg.info.avd->msg_type ==
-              AVSV_N2D_OPERATION_STATE_MSG) {
-          if (rec->msg.info.avd->msg_info.n2d_opr_state.msg_id != 0) {
-            rec->msg.info.avd->msg_info.n2d_opr_state.msg_id = 0;
-            found = true;
-            LOG_NO(
-                "Found not-ack oper_state msg for SU:'%s', "
-                "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
-                osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
-                                               .n2d_opr_state.su_name),
-                rec->msg.info.avd->msg_info.n2d_opr_state
-                    .su_oper_state,
-                rec->msg.info.avd->msg_info.n2d_opr_state
-                    .node_oper_state,
-                rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
-                    .raw);
-          }
-          m_AVND_DIQ_REC_PUSH(cb, rec);
-          break;
-        } else {
-          // delete other messages for now
-          avnd_diq_rec_del(cb, rec);
-          rec = cb->dnd_list.head;
-        }
+  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
+    auto rec = *iter;
+    osafassert(rec->msg.type == AVND_MSG_AVD);
+    // Assignment response had been sent, but not ack because
+    // last controller go down, reset msg_id and will be resent later
+    if (rec->msg.info.avd->msg_type == AVSV_N2D_INFO_SU_SI_ASSIGN_MSG) {
+      if (rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id != 0) {
+        rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id = 0;
+        LOG_NO(
+            "Found not-ack su_si_assign msg for SU:'%s', "
+            "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', "
+            "error:'%u', msg_id:'%u'",
+            osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
+                                           .n2d_su_si_assign.su_name),
+            osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
+                                           .n2d_su_si_assign.si_name),
+            rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
+            rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
+            rec->msg.info.avd->msg_info.n2d_su_si_assign
+                .single_csi,
+            rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
+            rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
        }
+      // leave in dnd_list
+      ++rec;
+      continue;
+    } else if (rec->msg.info.avd->msg_type ==
+          AVSV_N2D_OPERATION_STATE_MSG) {
+      if (rec->msg.info.avd->msg_info.n2d_opr_state.msg_id != 0) {
+        rec->msg.info.avd->msg_info.n2d_opr_state.msg_id = 0;
+        LOG_NO(
+            "Found not-ack oper_state msg for SU:'%s', "
+            "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
+            osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
+                                           .n2d_opr_state.su_name),
+            rec->msg.info.avd->msg_info.n2d_opr_state
+                .su_oper_state,
+            rec->msg.info.avd->msg_info.n2d_opr_state
+                .node_oper_state,
+            rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
+                .raw);
+      }
+      // leave in dnd_list
+      ++rec;
+      continue;
+    } else {
+      // delete other messages for now
+      iter = cb->dnd_list.erase(iter);
+      avnd_diq_rec_del(cb, rec);
      }
    }
    return;
@@ -1379,7 +1358,7 @@ AVND_DND_MSG_LIST *avnd_diq_rec_add(AVND_CB *cb, AVND_MSG 
*msg) {
    msg->info.avd = 0;
/* push the record to the AvD msg list */
-  m_AVND_DIQ_REC_PUSH(cb, rec);
+  cb->dnd_list.push_back(rec);
    TRACE_LEAVE();
    return rec;
@@ -1437,87 +1416,69 @@ void avnd_diq_rec_send_buffered_msg(AVND_CB *cb) {
    TRACE_ENTER();
    // Resend msgs from queue because amfnd dropped during headless
    // or headless-synchronization
-  if ((cb->dnd_list.head != nullptr)) {
-    AVND_DND_MSG_LIST *pending_rec = 0;
-    TRACE("Attach msg_id of buffered msg");
-    bool found = true;
-    while (found) {
-      found = false;
-      for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
-           pending_rec = pending_rec->next) {
-        if (pending_rec->msg.type == AVND_MSG_AVD) {
-          // Check su_si_assign message
-          if (pending_rec->msg.info.avd->msg_type ==
-                  AVSV_N2D_INFO_SU_SI_ASSIGN_MSG &&
-              pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id ==
-                  0) {
-            found = true;
-            m_AVND_DIQ_REC_POP(cb, pending_rec);
-#if 1
-            // only resend if this SUSI does exist
-            AVND_SU *su = cb->sudb.find(Amf::to_string(
-                
&pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.su_name));
-            if (su != nullptr && su->si_list.n_nodes > 0) {
-#endif
-              pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
-                  ++(cb->snd_msg_id);
-              m_AVND_DIQ_REC_PUSH(cb, pending_rec);
-              LOG_NO(
-                  "Found and resend buffered su_si_assign msg for SU:'%s', "
-                  "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', "
-                  "error:'%u', msg_id:'%u'",
-                  
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
-                                                 .n2d_su_si_assign.su_name),
-                  
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
-                                                 .n2d_su_si_assign.si_name),
-                  
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
-                  pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
-                  pending_rec->msg.info.avd->msg_info.n2d_su_si_assign
-                      .single_csi,
-                  pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
-                  pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
-
-#if 1
-            } else {
-              avnd_msg_content_free(cb, &pending_rec->msg);
-              delete pending_rec;
-              break;
-            }
-#endif
-          }
-          // Check oper_state message
-          else if (pending_rec->msg.info.avd->msg_type ==
-                       AVSV_N2D_OPERATION_STATE_MSG &&
-                   pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id ==
-                       0) {
-            found = true;
-            m_AVND_DIQ_REC_POP(cb, pending_rec);
-            if (pending_rec != nullptr) {
-              pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id =
-                  ++(cb->snd_msg_id);
-
-              m_AVND_DIQ_REC_PUSH(cb, pending_rec);
-              LOG_NO(
-                  "Found and resend buffered oper_state msg for SU:'%s', "
-                  "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
-                  
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
-                                                 .n2d_opr_state.su_name),
-                  pending_rec->msg.info.avd->msg_info.n2d_opr_state
-                      .su_oper_state,
-                  pending_rec->msg.info.avd->msg_info.n2d_opr_state
-                      .node_oper_state,
-                  pending_rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
-                      .raw);
-            }
-          }
-        }
+
+  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
+    auto pending_rec = *iter;
+    osafassert(pending_rec->msg.type == AVND_MSG_AVD);
+
+    // Check su_si_assign message
+    if (pending_rec->msg.info.avd->msg_type ==
+            AVSV_N2D_INFO_SU_SI_ASSIGN_MSG &&
+        pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id ==
+            0) {
+
+      // only resend if this SUSI does exist
+      AVND_SU *su = cb->sudb.find(Amf::to_string(
+          &pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.su_name));
+      if (su != nullptr && su->si_list.n_nodes > 0) {
+        pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
+            ++(cb->snd_msg_id);
+        LOG_NO(
+            "Found and resend buffered su_si_assign msg for SU:'%s', "
+            "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', "
+            "error:'%u', msg_id:'%u'",
+            osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
+                                           .n2d_su_si_assign.su_name),
+            osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
+                                           .n2d_su_si_assign.si_name),
+            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
+            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
+            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign
+                .single_csi,
+            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
+            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
+        ++iter;
+      } else {
+        iter = cb->dnd_list.erase(iter);
+        avnd_msg_content_free(cb, &pending_rec->msg);
+        delete pending_rec;
        }
+    } else if (pending_rec->msg.info.avd->msg_type == AVSV_N2D_OPERATION_STATE_MSG 
&&
+               pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id == 0) {
+        pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id =
+            ++(cb->snd_msg_id);
+
+        LOG_NO(
+            "Found and resend buffered oper_state msg for SU:'%s', "
+            "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
+            osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
+                                           .n2d_opr_state.su_name),
+            pending_rec->msg.info.avd->msg_info.n2d_opr_state
+                .su_oper_state,
+            pending_rec->msg.info.avd->msg_info.n2d_opr_state
+                .node_oper_state,
+            pending_rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
+                .raw);
+        ++iter;
+    } else {
+      // no other messages should be buffered
+      osafassert(false);
      }
-    TRACE("retransmit message to amfd");
-    for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
-         pending_rec = pending_rec->next) {
-      avnd_diq_rec_send(cb, pending_rec);
-    }
+  }
+
+  TRACE("retransmit message to amfd");
+  for (auto pending_rec : cb->dnd_list) {
+    avnd_diq_rec_send(cb, pending_rec);
    }
    TRACE_LEAVE();
    return;
diff --git a/src/amf/amfnd/proxy.cc b/src/amf/amfnd/proxy.cc
index c314c280d..95d74b677 100644
--- a/src/amf/amfnd/proxy.cc
+++ b/src/amf/amfnd/proxy.cc
@@ -25,6 +25,7 @@
****************************************************************************/
  #include <cinttypes>
+#include <algorithm>
#include "amf/amfnd/avnd.h"
  #include "base/osaf_extended_name.h"
@@ -138,7 +139,9 @@ uint32_t avnd_evt_ava_comp_val_req(AVND_CB *cb, AVND_EVT 
*evt) {
        LOG_ER("avnd_diq_rec_send:failed:%s,Type:%u and Hdl%llx",
               comp_name.c_str(), api_info->type, reg->hdl);
        /* pop & delete */
-      m_AVND_DIQ_REC_FIND_POP(cb, rec);
+      auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), rec);
+      osafassert(position != cb->dnd_list.end());
+      cb->dnd_list.erase(position);
        avnd_diq_rec_del(cb, rec);
      }
    } else {
@@ -173,7 +176,7 @@ uint32_t avnd_evt_ava_comp_val_req(AVND_CB *cb, AVND_EVT 
*evt) {
  
******************************************************************************/
  uint32_t avnd_evt_avd_comp_validation_resp_evh(AVND_CB *cb, AVND_EVT *evt) {
    uint32_t rc = NCSCC_RC_SUCCESS;
-  AVND_DND_MSG_LIST *rec = 0;
+  AVND_DND_MSG_LIST *rec = nullptr;
    AVSV_D2N_COMP_VALIDATION_RESP_INFO *info = nullptr;
    SaAisErrorT amf_rc = SA_AIS_OK;
    AVND_COMP *comp = nullptr, *pxy_comp = nullptr;
@@ -192,7 +195,13 @@ uint32_t avnd_evt_avd_comp_validation_resp_evh(AVND_CB 
*cb, AVND_EVT *evt) {
    TRACE("%s:MsgId=%u,NodeId=%u,result:%u", info_comp_name.c_str(), 
info->msg_id,
          info->node_id, info->result);
- m_AVND_DIQ_REC_FIND(cb, info->msg_id, rec);
+  for (auto temp_rec : cb->dnd_list) {
+    osafassert(temp_rec->msg.type == AVND_MSG_AVD);
+    if (*(reinterpret_cast<uint32_t*>(&(temp_rec->msg.info.avd->msg_info))) == 
info->msg_id) {
+      rec = temp_rec;
+      break;
+    }
+  }
if ((nullptr == rec) ||
        (memcmp(osaf_extended_name_borrow(&info->comp_name),
@@ -301,7 +310,9 @@ send_resp:
done:
    if (rec) {
-    m_AVND_DIQ_REC_FIND_POP(cb, rec);
+    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), rec);
+    osafassert(position != cb->dnd_list.end());
+    cb->dnd_list.erase(position);
      avnd_diq_rec_del(cb, rec);
    }
diff --git a/src/amf/amfnd/verify.cc b/src/amf/amfnd/verify.cc
index d5ddcea7f..5726ad93f 100644
--- a/src/amf/amfnd/verify.cc
+++ b/src/amf/amfnd/verify.cc
@@ -33,6 +33,7 @@
  */
#include "amf/amfnd/avnd.h"
+#include <algorithm>
/****************************************************************************
    Name          : avnd_evt_avd_verify_message
@@ -48,8 +49,6 @@
    Notes         : None.
  
******************************************************************************/
  uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, AVND_EVT *evt) {
-  AVND_DND_LIST *list = &((cb)->dnd_list);
-  AVND_DND_MSG_LIST *rec = 0, t_rec;
    AVSV_D2N_DATA_VERIFY_MSG_INFO *info;
    uint32_t rcv_id;
    bool msg_found = false;
@@ -100,9 +99,8 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, AVND_EVT *evt) 
{
     * Otherwise this exercise also helps us in cleaning all the messages
     * currently pending in the Queue and are not acked.
     */
-  for (rec = list->head; nullptr != rec;) {
-    t_rec = *rec;
-
+  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
+    auto rec = *iter;
      /*
       * Since AVD is telling us that he has received till recv_id, we should
       * always find msg with ID (rcv_id + 1). Delete and remove all the
@@ -112,10 +110,11 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, AVND_EVT 
*evt) {
       */
      if ((rcv_id + 1) > (*((uint32_t *)(&rec->msg.info.avd->msg_info)))) {
        /* pop & delete */
-      m_AVND_DIQ_REC_FIND_POP(cb, rec);
+      iter = cb->dnd_list.erase(iter);
        TRACE_1("AVND record %u deleted, upon fail-over",
                *((uint32_t *)(&rec->msg.info.avd->msg_info)));
        avnd_diq_rec_del(cb, rec);
+      continue;
      } else {
        avnd_diq_rec_send(cb, rec);
@@ -124,8 +123,7 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, AVND_EVT *evt) { msg_found = true;
      }
-
-    rec = t_rec.next;
+    ++iter;
    }
if ((cb->snd_msg_id != info->rcv_id_cnt) && (msg_found == false)) {


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