[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r9179 - in /fsf/trunk/libc: ChangeLog malloc/hooks.c
- To: commits@xxxxxxxxxx
- Subject: [commits] r9179 - in /fsf/trunk/libc: ChangeLog malloc/hooks.c
- From: eglibc@xxxxxxxxxx
- Date: Mon, 02 Nov 2009 08:03:51 -0000
Author: eglibc
Date: Mon Nov 2 00:03:50 2009
New Revision: 9179
Log:
Import glibc-mainline for 2009-11-02
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/malloc/hooks.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Mon Nov 2 00:03:50 2009
@@ -1,3 +1,8 @@
+2009-11-01 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ * malloc/hooks.c (free_check): Restore locking and call _int_free
+ appropriately.
+
2009-10-30 Ulrich Drepper <drepper@xxxxxxxxxx>
* version.h (VERSION): Bump for 2.11 release.
Modified: fsf/trunk/libc/malloc/hooks.c
==============================================================================
--- fsf/trunk/libc/malloc/hooks.c (original)
+++ fsf/trunk/libc/malloc/hooks.c Mon Nov 2 00:03:50 2009
@@ -162,8 +162,8 @@
((char*)p + sz)>=(mp_.sbrk_base+main_arena.system_mem) )) ||
sz<MINSIZE || sz&MALLOC_ALIGN_MASK || !inuse(p) ||
( !prev_inuse(p) && (p->prev_size&MALLOC_ALIGN_MASK ||
- (contig && (char*)prev_chunk(p)<mp_.sbrk_base) ||
- next_chunk(prev_chunk(p))!=p) ))
+ (contig && (char*)prev_chunk(p)<mp_.sbrk_base) ||
+ next_chunk(prev_chunk(p))!=p) ))
return NULL;
magic = MAGICBYTE(p);
for(sz += SIZE_SZ-1; (c = ((unsigned char*)p)[sz]) != magic; sz -= c) {
@@ -177,9 +177,9 @@
first. */
offset = (unsigned long)mem & page_mask;
if((offset!=MALLOC_ALIGNMENT && offset!=0 && offset!=0x10 &&
- offset!=0x20 && offset!=0x40 && offset!=0x80 && offset!=0x100 &&
- offset!=0x200 && offset!=0x400 && offset!=0x800 && offset!=0x1000 &&
- offset<0x2000) ||
+ offset!=0x20 && offset!=0x40 && offset!=0x80 && offset!=0x100 &&
+ offset!=0x200 && offset!=0x400 && offset!=0x800 && offset!=0x1000 &&
+ offset<0x2000) ||
!chunk_is_mmapped(p) || (p->size & PREV_INUSE) ||
( (((unsigned long)p - p->prev_size) & page_mask) != 0 ) ||
( (sz = chunksize(p)), ((p->prev_size + sz) & page_mask) != 0 ) )
@@ -276,13 +276,17 @@
mchunkptr p;
if(!mem) return;
+ (void)mutex_lock(&main_arena.mutex);
p = mem2chunk_check(mem, NULL);
if(!p) {
+ (void)mutex_unlock(&main_arena.mutex);
+
malloc_printerr(check_action, "free(): invalid pointer", mem);
return;
}
#if HAVE_MMAP
if (chunk_is_mmapped(p)) {
+ (void)mutex_unlock(&main_arena.mutex);
munmap_chunk(p);
return;
}
@@ -291,12 +295,11 @@
memset(mem, 0, chunksize(p) - (SIZE_SZ+1));
#endif
#ifdef ATOMIC_FASTBINS
- _int_free(&main_arena, p, 0);
-#else
- (void)mutex_lock(&main_arena.mutex);
+ _int_free(&main_arena, p, 1);
+#else
_int_free(&main_arena, p);
+#endif
(void)mutex_unlock(&main_arena.mutex);
-#endif
}
static Void_t*
@@ -345,13 +348,13 @@
if(oldsize - SIZE_SZ >= nb)
newmem = oldmem; /* do nothing */
else {
- /* Must alloc, copy, free. */
- if (top_check() >= 0)
+ /* Must alloc, copy, free. */
+ if (top_check() >= 0)
newmem = _int_malloc(&main_arena, bytes+1);
- if (newmem) {
- MALLOC_COPY(BOUNDED_N(newmem, bytes+1), oldmem, oldsize - 2*SIZE_SZ);
- munmap_chunk(oldp);
- }
+ if (newmem) {
+ MALLOC_COPY(BOUNDED_N(newmem, bytes+1), oldmem, oldsize - 2*SIZE_SZ);
+ munmap_chunk(oldp);
+ }
}
}
} else {
@@ -367,7 +370,7 @@
nb = chunksize(newp);
if(oldp<newp || oldp>=chunk_at_offset(newp, nb)) {
memset((char*)oldmem + 2*sizeof(mbinptr), 0,
- oldsize - (2*sizeof(mbinptr)+2*SIZE_SZ+1));
+ oldsize - (2*sizeof(mbinptr)+2*SIZE_SZ+1));
} else if(nb > oldsize+SIZE_SZ) {
memset((char*)BOUNDED_N(chunk2mem(newp), bytes) + oldsize,
0, nb - (oldsize+SIZE_SZ));
@@ -626,7 +629,7 @@
mark_bin(&main_arena, i);
} else {
/* Oops, index computation from chunksize must have changed.
- Link the whole list into unsorted_chunks. */
+ Link the whole list into unsorted_chunks. */
first(b) = last(b) = b;
b = unsorted_chunks(&main_arena);
ms->av[2*i+2]->bk = b;
@@ -667,7 +670,7 @@
/* Check whether it is safe to enable malloc checking, or whether
it is necessary to disable it. */
if (ms->using_malloc_checking && !using_malloc_checking &&
- !disallow_malloc_check)
+ !disallow_malloc_check)
__malloc_check_init ();
else if (!ms->using_malloc_checking && using_malloc_checking) {
__malloc_hook = NULL;