diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | malloc/arena.c | 10 | ||||
-rw-r--r-- | malloc/malloc.c | 2 |
3 files changed, 11 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index c935b53307..af67e356ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-07-26 Anton Blanchard <anton@samba.org> + + * malloc/malloc.c (sYSTRIm): Replace divide and multiply with mask. + * malloc/arena.c (heap_trim): Likewise. + 2010-08-16 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/syscalls.list: Add entry for fanotify_init diff --git a/malloc/arena.c b/malloc/arena.c index 4d0deefe19..59e96dbf09 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001,2002,2003,2004,2005,2006,2007,2009 + Copyright (C) 2001,2002,2003,2004,2005,2006,2007,2009,2010 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger <wg@malloc.de>, 2001. @@ -206,7 +206,7 @@ malloc_atfork(size_t sz, const Void_t *caller) return _int_malloc(&main_arena, sz); } else { if(top_check()<0) - return 0; + return 0; victim = _int_malloc(&main_arena, sz+1); return mem2mem_check(victim, sz); } @@ -633,7 +633,7 @@ ptmalloc_init (void) /* There are platforms (e.g. Hurd) with a link-time hook mechanism. */ #ifdef thread_atfork_static thread_atfork_static(ptmalloc_lock_all, ptmalloc_unlock_all, \ - ptmalloc_unlock_all2) + ptmalloc_unlock_all2) #endif @@ -660,7 +660,7 @@ dump_heap(heap) heap_info *heap; ptr = (heap->ar_ptr != (mstate)(heap+1)) ? (char*)(heap + 1) : (char*)(heap + 1) + sizeof(struct malloc_state); p = (mchunkptr)(((unsigned long)ptr + MALLOC_ALIGN_MASK) & - ~MALLOC_ALIGN_MASK); + ~MALLOC_ALIGN_MASK); for(;;) { fprintf(stderr, "chunk %p size %10lx", p, (long)p->size); if(p == top(heap->ar_ptr)) { @@ -879,7 +879,7 @@ heap_trim(heap, pad) heap_info *heap; size_t pad; /*check_chunk(ar_ptr, top_chunk);*/ } top_size = chunksize(top_chunk); - extra = ((top_size - pad - MINSIZE + (pagesz-1))/pagesz - 1) * pagesz; + extra = (top_size - pad - MINSIZE - 1) & ~(pagesz - 1); if(extra < (long)pagesz) return 0; /* Try to shrink. */ diff --git a/malloc/malloc.c b/malloc/malloc.c index 9594be4cbd..53ee1ccb87 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -3466,7 +3466,7 @@ static int sYSTRIm(pad, av) size_t pad; mstate av; top_size = chunksize(av->top); /* Release in pagesize units, keeping at least one page */ - extra = ((top_size - pad - MINSIZE + (pagesz-1)) / pagesz - 1) * pagesz; + extra = (top_size - pad - MINSIZE - 1) & ~(pagesz - 1); if (extra > 0) { |