summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2017-03-18 02:29:12 -0400
committerMark H Weaver <mhw@netris.org>2017-03-19 15:54:58 -0400
commit512fc6db7bb900a892810d4b3c8b0e712b8e2379 (patch)
tree5d44de567c16b9138d1cce2760e5216c379fc051 /gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
parent26e34e1e1288d657e92372efb6edc95c0e299247 (diff)
downloadguix-patches-512fc6db7bb900a892810d4b3c8b0e712b8e2379.tar
guix-patches-512fc6db7bb900a892810d4b3c8b0e712b8e2379.tar.gz
gnu: libevent@2.0: Add fix from upstream.
This fix was cherry-picked by Mozilla from upstream libevent-2.1 to its bundled copy of libevent-2.0.21 in mozilla-esr45. * gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/libevent.scm (libevent-2.0)[source][patches]: Add it.
Diffstat (limited to 'gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch')
-rw-r--r--gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch b/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
new file mode 100644
index 0000000000..0253700bf6
--- /dev/null
+++ b/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
@@ -0,0 +1,38 @@
+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
+