]> git.eshelyaron.com Git - emacs.git/commitdiff
(lisp_align_malloc): Check for memory full when
authorGerd Moellmann <gerd@gnu.org>
Tue, 19 Aug 2003 12:58:35 +0000 (12:58 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 19 Aug 2003 12:58:35 +0000 (12:58 +0000)
allocating ablocks, which also avoids freeing a pointer into an
ablocks structure.

src/ChangeLog
src/alloc.c

index 9ac972507e2c64813c520f36ee5dcc04b3c2af50..73e8de3aa718e3503afd23716693ade516f6186a 100644 (file)
@@ -1,5 +1,11 @@
 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.
 
index 7f05cf77937ee00bd8b7e050c8634eb0371a1484..c4496b6ff7b8a42acbe37c251b6da69483fd3fa3 100644 (file)
@@ -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);