Commit c44a3172 authored by Sam Lantinga's avatar Sam Lantinga

Fixed bug #428

This fix is overkill, but approved by Doug Lea, and he'll be releasing a
new version of his malloc.c sometime next month.

--HG--
branch : SDL-1.2
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%402546
parent be91b510
...@@ -3408,7 +3408,7 @@ static void* sys_alloc(mstate m, size_t nb) { ...@@ -3408,7 +3408,7 @@ static void* sys_alloc(mstate m, size_t nb) {
if (ss == 0) { /* First time through or recovery */ if (ss == 0) { /* First time through or recovery */
char* base = (char*)CALL_MORECORE(0); char* base = (char*)CALL_MORECORE(0);
if (base != CMFAIL) { if (base != CMFAIL) {
asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); asize = granularity_align(nb + TOP_FOOT_SIZE + MALLOC_ALIGNMENT + SIZE_T_ONE);
/* Adjust to end on a page boundary */ /* Adjust to end on a page boundary */
if (!is_page_aligned(base)) if (!is_page_aligned(base))
asize += (page_align((size_t)base) - (size_t)base); asize += (page_align((size_t)base) - (size_t)base);
...@@ -3422,7 +3422,7 @@ static void* sys_alloc(mstate m, size_t nb) { ...@@ -3422,7 +3422,7 @@ static void* sys_alloc(mstate m, size_t nb) {
} }
else { else {
/* Subtract out existing available top space from MORECORE request. */ /* Subtract out existing available top space from MORECORE request. */
asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + SIZE_T_ONE); asize = granularity_align(nb - m->topsize + TOP_FOOT_SIZE + MALLOC_ALIGNMENT + SIZE_T_ONE);
/* Use mem here only if it did continuously extend old space */ /* Use mem here only if it did continuously extend old space */
if (asize < HALF_MAX_SIZE_T && if (asize < HALF_MAX_SIZE_T &&
(br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) { (br = (char*)(CALL_MORECORE(asize))) == ss->base+ss->size) {
...@@ -3435,7 +3435,7 @@ static void* sys_alloc(mstate m, size_t nb) { ...@@ -3435,7 +3435,7 @@ static void* sys_alloc(mstate m, size_t nb) {
if (br != CMFAIL) { /* Try to use/extend the space we did get */ if (br != CMFAIL) { /* Try to use/extend the space we did get */
if (asize < HALF_MAX_SIZE_T && if (asize < HALF_MAX_SIZE_T &&
asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) { asize < nb + TOP_FOOT_SIZE + SIZE_T_ONE) {
size_t esize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE - asize); size_t esize = granularity_align(nb + TOP_FOOT_SIZE + MALLOC_ALIGNMENT + SIZE_T_ONE - asize);
if (esize < HALF_MAX_SIZE_T) { if (esize < HALF_MAX_SIZE_T) {
char* end = (char*)CALL_MORECORE(esize); char* end = (char*)CALL_MORECORE(esize);
if (end != CMFAIL) if (end != CMFAIL)
...@@ -3459,7 +3459,7 @@ static void* sys_alloc(mstate m, size_t nb) { ...@@ -3459,7 +3459,7 @@ static void* sys_alloc(mstate m, size_t nb) {
} }
if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */ if (HAVE_MMAP && tbase == CMFAIL) { /* Try MMAP */
size_t req = nb + TOP_FOOT_SIZE + SIZE_T_ONE; size_t req = nb + TOP_FOOT_SIZE + MALLOC_ALIGNMENT + SIZE_T_ONE;
size_t rsize = granularity_align(req); size_t rsize = granularity_align(req);
if (rsize > nb) { /* Fail if wraps around zero */ if (rsize > nb) { /* Fail if wraps around zero */
char* mp = (char*)(CALL_MMAP(rsize)); char* mp = (char*)(CALL_MMAP(rsize));
...@@ -3472,7 +3472,7 @@ static void* sys_alloc(mstate m, size_t nb) { ...@@ -3472,7 +3472,7 @@ static void* sys_alloc(mstate m, size_t nb) {
} }
if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */ if (HAVE_MORECORE && tbase == CMFAIL) { /* Try noncontiguous MORECORE */
size_t asize = granularity_align(nb + TOP_FOOT_SIZE + SIZE_T_ONE); size_t asize = granularity_align(nb + TOP_FOOT_SIZE + MALLOC_ALIGNMENT + SIZE_T_ONE);
if (asize < HALF_MAX_SIZE_T) { if (asize < HALF_MAX_SIZE_T) {
char* br = CMFAIL; char* br = CMFAIL;
char* end = CMFAIL; char* end = CMFAIL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment