From b18c04dd74577e935358968d32140fd31115e4dd Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 2 Nov 2011 22:50:47 -0400 Subject: [PATCH] Use the free-trailing-chains function in evbuffer_insert_chain too --- buffer.c | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) 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; -- 2.50.1