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.
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			38 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
 | |
| 
 |