From: Nick Mathewson Date: Thu, 3 Nov 2011 02:50:47 +0000 (-0400) Subject: Use the free-trailing-chains function in evbuffer_insert_chain too X-Git-Tag: release-2.1.1-alpha~170^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b18c04dd;p=libevent Use the free-trailing-chains function in evbuffer_insert_chain too --- diff --git a/buffer.c b/buffer.c index a042a1ed..bc6e265b 100644 --- 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;