remove useless check of bin match in malloc
authorRich Felker <dalias@aerifal.cx>
Wed, 4 Mar 2015 15:48:00 +0000 (10:48 -0500)
committerRich Felker <dalias@aerifal.cx>
Wed, 4 Mar 2015 15:48:00 +0000 (10:48 -0500)
this re-check idiom seems to have been copied from the alloc_fwd and
alloc_rev functions, which guess a bin based on non-synchronized
memory access to adjacent chunk headers then need to confirm, after
locking the bin, that the chunk is actually in the bin they locked.

the check being removed, however, was being performed on a chunk
obtained from the already-locked bin. there is no race to account for
here; the check could only fail in the event of corrupt free lists,
and even then it would not catch them but simply continue running.

since the bin_index function is mildly expensive, it seems preferable
to remove the check rather than trying to convert it into a useful
consistency check. casual testing shows a 1-5% reduction in run time.

src/malloc/malloc.c

index 4f61807b54340f6059efb8fcaa50a4c5d84e7ce1..d4de2dc1ac71a83d0f2f8d183c0eb1a91922c197 100644 (file)
@@ -364,7 +364,7 @@ void *malloc(size_t n)
                j = first_set(mask);
                lock_bin(j);
                c = mal.bins[j].head;
-               if (c != BIN_TO_CHUNK(j) && j == bin_index(c->csize)) {
+               if (c != BIN_TO_CHUNK(j)) {
                        if (!pretrim(c, n, i, j)) unbin(c, j);
                        unlock_bin(j);
                        break;