]> granicus.if.org Git - libevent/commitdiff
Use the free-trailing-chains function in evbuffer_insert_chain too
authorNick Mathewson <nickm@torproject.org>
Thu, 3 Nov 2011 02:50:47 +0000 (22:50 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 3 Nov 2011 02:50:47 +0000 (22:50 -0400)
buffer.c

index a042a1ede6a6b7682a62039afc41ae39ff4fd167..bc6e265b4565d4c50bfc89e38abb90794d03749b 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -290,21 +290,11 @@ evbuffer_chain_insert(struct evbuffer *buf,
                EVUTIL_ASSERT(buf->first == NULL);
                buf->first = buf->last = chain;
        } else {
-               struct evbuffer_chain **ch = buf->last_with_datap;
-               /* Find the first victim chain.  It might be *last_with_datap */
-               while ((*ch) && ((*ch)->off != 0 || CHAIN_PINNED(*ch)))
-                       ch = &(*ch)->next;
-               if (*ch == NULL) {
-                       /* There is no victim; just append this new chain. */
-                       buf->last->next = chain;
-                       if (chain->off)
-                               buf->last_with_datap = &buf->last->next;
-               } else {
-                       /* Replace all victim chains with this chain. */
-                       EVUTIL_ASSERT(evbuffer_chains_all_empty(*ch));
-                       evbuffer_free_all_chains(*ch);
-                       *ch = chain;
-               }
+               struct evbuffer_chain **chp;
+               chp = evbuffer_free_trailing_empty_chains(buf);
+               *chp = chain;
+               if (chain->off)
+                       buf->last_with_datap = chp;
                buf->last = chain;
        }
        buf->total_len += chain->off;