|  | @@ -80,8 +80,7 @@ typedef struct memarea_chunk_t {
 | 
	
		
			
				|  |  |    struct memarea_chunk_t *next_chunk;
 | 
	
		
			
				|  |  |    size_t mem_size; /**< How much RAM is available in mem, total? */
 | 
	
		
			
				|  |  |    char *next_mem; /**< Next position in mem to allocate data at.  If it's
 | 
	
		
			
				|  |  | -                   * greater than or equal to mem+mem_size, this chunk is
 | 
	
		
			
				|  |  | -                   * full. */
 | 
	
		
			
				|  |  | +                   * equal to mem+mem_size, this chunk is full. */
 | 
	
		
			
				|  |  |  #ifdef USE_ALIGNED_ATTRIBUTE
 | 
	
		
			
				|  |  |    char mem[FLEXIBLE_ARRAY_MEMBER] __attribute__((aligned(MEMAREA_ALIGN)));
 | 
	
		
			
				|  |  |  #else
 | 
	
	
		
			
				|  | @@ -237,7 +236,10 @@ memarea_alloc(memarea_t *area, size_t sz)
 | 
	
		
			
				|  |  |    tor_assert(sz < SIZE_T_CEILING);
 | 
	
		
			
				|  |  |    if (sz == 0)
 | 
	
		
			
				|  |  |      sz = 1;
 | 
	
		
			
				|  |  | -  if (chunk->next_mem+sz > chunk->U_MEM+chunk->mem_size) {
 | 
	
		
			
				|  |  | +  tor_assert(chunk->next_mem <= chunk->U_MEM + chunk->mem_size);
 | 
	
		
			
				|  |  | +  const size_t space_remaining =
 | 
	
		
			
				|  |  | +    (chunk->U_MEM + chunk->mem_size) - chunk->next_mem;
 | 
	
		
			
				|  |  | +  if (sz > space_remaining) {
 | 
	
		
			
				|  |  |      if (sz+CHUNK_HEADER_SIZE >= CHUNK_SIZE) {
 | 
	
		
			
				|  |  |        /* This allocation is too big.  Stick it in a special chunk, and put
 | 
	
		
			
				|  |  |         * that chunk second in the list. */
 |