mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 20:41:27 -04:00
Merge remote-tracking branch 'github/20_evbuffer_remove_bug'
This commit is contained in:
commit
dea055d026
18
buffer.c
18
buffer.c
@ -280,21 +280,11 @@ evbuffer_chain_insert(struct evbuffer *buf,
|
|||||||
EVUTIL_ASSERT(buf->first == NULL);
|
EVUTIL_ASSERT(buf->first == NULL);
|
||||||
buf->first = buf->last = chain;
|
buf->first = buf->last = chain;
|
||||||
} else {
|
} else {
|
||||||
struct evbuffer_chain **ch = buf->last_with_datap;
|
struct evbuffer_chain **chp;
|
||||||
/* Find the first victim chain. It might be *last_with_datap */
|
chp = evbuffer_free_trailing_empty_chains(buf);
|
||||||
while ((*ch) && ((*ch)->off != 0 || CHAIN_PINNED(*ch)))
|
*chp = chain;
|
||||||
ch = &(*ch)->next;
|
|
||||||
if (*ch == NULL) {
|
|
||||||
/* There is no victim; just append this new chain. */
|
|
||||||
buf->last->next = chain;
|
|
||||||
if (chain->off)
|
if (chain->off)
|
||||||
buf->last_with_datap = &buf->last->next;
|
buf->last_with_datap = chp;
|
||||||
} else {
|
|
||||||
/* Replace all victim chains with this chain. */
|
|
||||||
EVUTIL_ASSERT(evbuffer_chains_all_empty(*ch));
|
|
||||||
evbuffer_free_all_chains(*ch);
|
|
||||||
*ch = chain;
|
|
||||||
}
|
|
||||||
buf->last = chain;
|
buf->last = chain;
|
||||||
}
|
}
|
||||||
buf->total_len += chain->off;
|
buf->total_len += chain->off;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user