mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 04:19:10 -04:00
evbuffer_add: Use last_with_datap if set, not last.
evbuffer_add() would always put data in the last chain, even if there was available space in a previous chain, and in doing so it also failed to update last_with_datap, causing subsequent calls to other functions that do look at last_with_datap to add data in the middle of the evbuffer instead of at the end. Fixes the evbuffer_add() part of issue #335, and the evbuffer/add2 and evbuffer/add3 tests, and also prevents wasting space available in the chain pointed to by last_with_datap.
This commit is contained in:
parent
d5ee739153
commit
a8769ef12d
6
buffer.c
6
buffer.c
@ -1732,7 +1732,11 @@ evbuffer_add(struct evbuffer *buf, const void *data_in, size_t datlen)
|
||||
goto done;
|
||||
}
|
||||
|
||||
chain = buf->last;
|
||||
if (*buf->last_with_datap == NULL) {
|
||||
chain = buf->last;
|
||||
} else {
|
||||
chain = *buf->last_with_datap;
|
||||
}
|
||||
|
||||
/* If there are no chains allocated for this buffer, allocate one
|
||||
* big enough to hold all the data. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user