Browse Source

fast-import: fix unalinged allocation and access

The specialized pool allocator fast-import uses aligned objects on the
size of a pointer, which was not sufficient at least on Sparc.  Instead,
make the alignment for objects of type unitmax_t.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
David S. Miller 17 years ago committed by Junio C Hamano
parent
commit
69ae517541
  1. 10
      fast-import.c

10
fast-import.c

@ -196,7 +196,7 @@ struct mem_pool
struct mem_pool *next_pool; struct mem_pool *next_pool;
char *next_free; char *next_free;
char *end; char *end;
char space[FLEX_ARRAY]; /* more */ uintmax_t space[FLEX_ARRAY]; /* more */
}; };


struct atom_str struct atom_str
@ -534,15 +534,15 @@ static void *pool_alloc(size_t len)
total_allocd += sizeof(struct mem_pool) + mem_pool_alloc; total_allocd += sizeof(struct mem_pool) + mem_pool_alloc;
p = xmalloc(sizeof(struct mem_pool) + mem_pool_alloc); p = xmalloc(sizeof(struct mem_pool) + mem_pool_alloc);
p->next_pool = mem_pool; p->next_pool = mem_pool;
p->next_free = p->space; p->next_free = (char *) p->space;
p->end = p->next_free + mem_pool_alloc; p->end = p->next_free + mem_pool_alloc;
mem_pool = p; mem_pool = p;
} }


r = p->next_free; r = p->next_free;
/* round out to a pointer alignment */ /* round out to a 'uintmax_t' alignment */
if (len & (sizeof(void*) - 1)) if (len & (sizeof(uintmax_t) - 1))
len += sizeof(void*) - (len & (sizeof(void*) - 1)); len += sizeof(uintmax_t) - (len & (sizeof(uintmax_t) - 1));
p->next_free += len; p->next_free += len;
return r; return r;
} }

Loading…
Cancel
Save