-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 30/08/13 16:01, Christopher Samuel wrote:
> Thanks for this, I'll take a look further next week..
The code where it's SEGV'ing is here:
/* check that one of the above allocation paths succeeded */
if ((unsigned long)(size) >= (unsigned long)(nb + MINSIZE)) {
remainder_size = size - nb;
remainder = chunk_at_offset(p, nb);
av->top = remainder;
set_head(p, nb | PREV_INUSE | (av != &main_arena ? NON_MAIN_ARENA : 0));
set_head(remainder, remainder_size | PREV_INUSE);
check_malloced_chunk(av, p, nb);
return chunk2mem(p);
}
It dies when it does:
set_head(remainder, remainder_size | PREV_INUSE);
where remainder_size=0.
This implies that size and nb are the same, so I'm wondering
if the test at the top of that block should not have the equals,
so instead be this?
/* check that one of the above allocation paths succeeded */
if ((unsigned long)(size) > (unsigned long)(nb + MINSIZE)) {
It would ensure that the set_head() macro would never get called
with a 0 argument.
The code would then fall through to the malloc failure part
(which is what I suspect we want).
Thoughts?
All the best,
Chris
- --
Christopher Samuel Senior Systems Administrator
VLSCI - Victorian Life Sciences Computation Initiative
Email: [email protected] Phone: +61 (0)3 903 55545
http://www.vlsci.org.au/ http://twitter.com/vlsci
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iEYEARECAAYFAlIkJNkACgkQO2KABBYQAh+Y/QCeLwnqEQGK4meKQbETwqHg1RtI
iikAoIofXBPnpI8qbS+zau9ezX78WizW
=QCSz
-----END PGP SIGNATURE-----