Commit f4446bbf authored by Gerd Moellmann's avatar Gerd Moellmann
Browse files

(lisp_align_malloc): Check for memory full when

allocating ablocks, which also avoids freeing a pointer into an
ablocks structure.
parent c5788e99
2003-08-19 Gerd Moellmann <gerd@gnu.org>
* alloc.c (lisp_align_malloc): Check for memory full when
allocating ablocks, which also avoids freeing a pointer into an
ablocks structure.
* puresize.h (BASE_PURESIZE): Increase to 1100000.
* buffer.c (Fmove_overlay): Set overlay's next pointer
unconditionally.
......
......@@ -766,6 +766,23 @@ lisp_align_malloc (nbytes, type)
mallopt (M_MMAP_MAX, MMAP_MAX_AREAS);
#endif
/* If the memory just allocated cannot be addressed thru a Lisp
object's pointer, and it needs to be, that's equivalent to
running out of memory. */
if (type != MEM_TYPE_NON_LISP)
{
Lisp_Object tem;
char *end = (char *) base + ABLOCKS_BYTES - 1;
XSETCONS (tem, end);
if ((char *) XCONS (tem) != end)
{
lisp_malloc_loser = base;
free (base);
UNBLOCK_INPUT;
memory_full ();
}
}
/* Initialize the blocks and put them on the free list.
Is `base' was not properly aligned, we can't use the last block. */
for (i = 0; i < (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1); i++)
......@@ -788,21 +805,6 @@ lisp_align_malloc (nbytes, type)
val = free_ablock;
free_ablock = free_ablock->x.next_free;
/* If the memory just allocated cannot be addressed thru a Lisp
object's pointer, and it needs to be,
that's equivalent to running out of memory. */
if (val && type != MEM_TYPE_NON_LISP)
{
Lisp_Object tem;
XSETCONS (tem, (char *) val + nbytes - 1);
if ((char *) XCONS (tem) != (char *) val + nbytes - 1)
{
lisp_malloc_loser = val;
free (val);
val = 0;
}
}
#if GC_MARK_STACK && !defined GC_MALLOC_CHECK
if (val && type != MEM_TYPE_NON_LISP)
mem_insert (val, (char *) val + nbytes, type);
......
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