From 1e8ddeb8a4c5fd7cc872738d3ef5866ab33c1355 Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Thu, 17 Aug 2017 23:01:26 +0900
Subject: [PATCH] Replace ngtcp2_acktr_remove with ngtcp2_acktr_pop

---
 lib/ngtcp2_acktr.c        | 21 +++++----------------
 lib/ngtcp2_acktr.h        |  5 +++--
 lib/ngtcp2_conn.c         |  6 +++---
 tests/ngtcp2_acktr_test.c |  3 +--
 4 files changed, 12 insertions(+), 23 deletions(-)

diff --git a/lib/ngtcp2_acktr.c b/lib/ngtcp2_acktr.c
index fb6409d0..203fddb2 100644
--- a/lib/ngtcp2_acktr.c
+++ b/lib/ngtcp2_acktr.c
@@ -79,21 +79,10 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, ngtcp2_acktr_entry *ent) {
 
 ngtcp2_acktr_entry *ngtcp2_acktr_get(ngtcp2_acktr *acktr) { return acktr->ent; }
 
-void ngtcp2_acktr_remove(ngtcp2_acktr *acktr, const ngtcp2_acktr_entry *ent) {
-  ngtcp2_acktr_entry **pent;
-
-  for (pent = &acktr->ent; *pent; pent = &(*pent)->next) {
-    if (ent->pkt_num != (*pent)->pkt_num) {
-      continue;
-    }
-
-    *pent = (*pent)->next;
-
-    if (!(ent->flags & NGTCP2_ACKTR_FLAG_PASSIVE)) {
-      assert(acktr->nactive_ack > 0);
-      --acktr->nactive_ack;
-    }
-
-    return;
+void ngtcp2_acktr_pop(ngtcp2_acktr *acktr) {
+  if (!(acktr->ent->flags & NGTCP2_ACKTR_FLAG_PASSIVE)) {
+    assert(acktr->nactive_ack > 0);
+    --acktr->nactive_ack;
   }
+  acktr->ent = acktr->ent->next;
 }
diff --git a/lib/ngtcp2_acktr.h b/lib/ngtcp2_acktr.h
index 413af917..548c55db 100644
--- a/lib/ngtcp2_acktr.h
+++ b/lib/ngtcp2_acktr.h
@@ -112,8 +112,9 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, ngtcp2_acktr_entry *ent);
 ngtcp2_acktr_entry *ngtcp2_acktr_get(ngtcp2_acktr *acktr);
 
 /*
- * ngtcp2_acktr_remove removes the |ent|.
+ * ngtcp2_acktr_remove the head of entries, which has the largest
+ * packet number.
  */
-void ngtcp2_acktr_remove(ngtcp2_acktr *acktr, const ngtcp2_acktr_entry *ent);
+void ngtcp2_acktr_pop(ngtcp2_acktr *acktr);
 
 #endif /* NGTCP2_ACKTR_H */
diff --git a/lib/ngtcp2_conn.c b/lib/ngtcp2_conn.c
index 592b28e2..5fc0b2b3 100644
--- a/lib/ngtcp2_conn.c
+++ b/lib/ngtcp2_conn.c
@@ -366,7 +366,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
   first_pkt_num = last_pkt_num = rpkt->pkt_num;
   ack_delay = ts - rpkt->tstamp;
 
-  ngtcp2_acktr_remove(&conn->acktr, rpkt);
+  ngtcp2_acktr_pop(&conn->acktr);
   ngtcp2_acktr_entry_del(rpkt, conn->mem);
 
   ack->type = NGTCP2_FRAME_ACK;
@@ -376,7 +376,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
   for (; (rpkt = ngtcp2_acktr_get(&conn->acktr));) {
     if (rpkt->pkt_num + 1 == last_pkt_num) {
       last_pkt_num = rpkt->pkt_num;
-      ngtcp2_acktr_remove(&conn->acktr, rpkt);
+      ngtcp2_acktr_pop(&conn->acktr);
       ngtcp2_acktr_entry_del(rpkt, conn->mem);
       continue;
     }
@@ -403,7 +403,7 @@ static int conn_create_ack_frame(ngtcp2_conn *conn, ngtcp2_ack *ack,
 
     first_pkt_num = last_pkt_num = rpkt->pkt_num;
 
-    ngtcp2_acktr_remove(&conn->acktr, rpkt);
+    ngtcp2_acktr_pop(&conn->acktr);
     ngtcp2_acktr_entry_del(rpkt, conn->mem);
 
     if (ack->num_blks == 255) {
diff --git a/tests/ngtcp2_acktr_test.c b/tests/ngtcp2_acktr_test.c
index 681666e3..1a6def98 100644
--- a/tests/ngtcp2_acktr_test.c
+++ b/tests/ngtcp2_acktr_test.c
@@ -58,8 +58,7 @@ void test_ngtcp2_acktr_add(void) {
   }
 
   for (i = 0; i < arraylen(ents); ++i) {
-    ent = ngtcp2_acktr_get(&acktr);
-    ngtcp2_acktr_remove(&acktr, ent);
+    ngtcp2_acktr_pop(&acktr);
 
     ent = ngtcp2_acktr_get(&acktr);
 
-- 
GitLab