]> git.eshelyaron.com Git - emacs.git/commitdiff
(malloc_get_state, malloc_set_state): New declarations.
authorRichard M. Stallman <rms@gnu.org>
Wed, 9 Apr 1997 04:00:10 +0000 (04:00 +0000)
committerRichard M. Stallman <rms@gnu.org>
Wed, 9 Apr 1997 04:00:10 +0000 (04:00 +0000)
(main): Restore internal malloc state when loading from dumped image.
(Fdump_emacs): Copy internal malloc state for dumping, then free it.

src/emacs.c

index 763b778e0c9475d1632e40b441f65513b474a8ef..a8bd976e7349ee4f571d3578c726da51ae2218df 100644 (file)
@@ -81,6 +81,16 @@ Lisp_Object Vkill_emacs_hook;
   on subsequent starts.  */
 int initialized;
 
+#ifdef DOUG_LEA_MALLOC
+/* Preserves a pointer to the memory allocated that copies that
+   static data inside glibc's malloc.  */
+void *malloc_state_ptr;
+/* From glibc, a routine that returns a copy of the malloc internal state.  */
+extern void *malloc_get_state ();
+/* From glibc, a routine that overwrites the malloc internal state.  */
+extern void malloc_set_state ();
+#endif
+
 /* Variable whose value is symbol giving operating system type.  */
 Lisp_Object Vsystem_type;
 
@@ -486,6 +496,14 @@ main (argc, argv, envp)
   __sbrk (1);
 #endif
 
+#ifdef DOUG_LEA_MALLOC
+  if (initialized)
+    {
+      malloc_set_state (malloc_state_ptr);
+      free (malloc_state_ptr);
+    }
+#endif
+
   sort_args (argc, argv);
 
   if (argmatch (argv, argc, "-version", "--version", 3, NULL, &skip_args))
@@ -1509,9 +1527,15 @@ and announce itself normally when it is run.")
      Meanwhile, my_edata is not valid on Windows.  */
   memory_warnings (my_edata, malloc_warning);
 #endif /* not WINDOWSNT */
+#endif
+#ifdef DOUG_LEA_MALLOC
+  malloc_state_ptr = malloc_get_state ();
 #endif
   unexec (XSTRING (filename)->data,
          !NILP (symfile) ? XSTRING (symfile)->data : 0, my_edata, 0, 0);
+#ifdef DOUG_LEA_MALLOC
+  free (malloc_state_ptr);
+#endif
 #endif /* not VMS */
 
   Vpurify_flag = tem;