39 lines
1.2 KiB
Diff
39 lines
1.2 KiB
Diff
From a8769ef12d7e223e33fc47bed03fba2bfa2f3536 Mon Sep 17 00:00:00 2001
|
|
From: Marcus Sundberg <marcus@marcussundberg.com>
|
|
Date: Sat, 26 Mar 2016 20:11:43 +0100
|
|
Subject: [PATCH] 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.
|
|
---
|
|
buffer.c | 6 +++++-
|
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/buffer.c b/buffer.c
|
|
index 7cca0e8a..f378b731 100644
|
|
--- a/buffer.c
|
|
+++ b/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. */
|
|
--
|
|
2.12.0
|
|
|