]> git.eshelyaron.com Git - emacs.git/commitdiff
* alloc.c (memory_full) [!SYNC_INPUT]: Fix signal-related race.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 28 Jul 2011 17:05:33 +0000 (10:05 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 28 Jul 2011 17:05:33 +0000 (10:05 -0700)
Without this fix, if a signal arrives just after memory fills up,
'malloc' might be invoked reentrantly.

src/ChangeLog
src/alloc.c

index 045c431178921aa9af034ddfe8be4dce97f67c45..eef9cede5615796034cdfad011af524bc94253db 100644 (file)
@@ -1,5 +1,9 @@
 2011-07-28  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * alloc.c (memory_full) [!SYNC_INPUT]: Fix signal-related race.
+       Without this fix, if a signal arrives just after memory fills up,
+       'malloc' might be invoked reentrantly.
+
        * image.c (x_check_image_size) [!HAVE_X_WINDOWS]: Return 1.
        In other words, assume that every image size is allowed, on non-X
        hosts.  This assumption is probably wrong, but it lets Emacs compile.
index eb0185a8e35be3b6f5a66cc935b60ed473bee998..b96fc1f06424610d931b4d078f2b6821dfe63400 100644 (file)
@@ -3282,12 +3282,16 @@ memory_full (size_t nbytes)
   int enough_free_memory = 0;
   if (SPARE_MEMORY < nbytes)
     {
-      void *p = malloc (SPARE_MEMORY);
+      void *p;
+
+      MALLOC_BLOCK_INPUT;
+      p = malloc (SPARE_MEMORY);
       if (p)
        {
          free (p);
          enough_free_memory = 1;
        }
+      MALLOC_UNBLOCK_INPUT;
     }
 
   if (! enough_free_memory)