changeset 49357:90e4c5eeb9a0

(Fgc_status): Print zombie list. (mark_maybe_object) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]: Fix assignment of zombies. (Fgarbage_collect) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]: Don't take car of non-cons.
author Dave Love <fx@gnu.org>
date Tue, 21 Jan 2003 16:56:13 +0000
parents fbabb532002e
children bd3dee6a88d7
files src/alloc.c
diffstat 1 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Tue Jan 21 16:47:27 2003 +0000
+++ b/src/alloc.c	Tue Jan 21 16:56:13 2003 +0000
@@ -3337,15 +3337,19 @@
        doc: /* Show information about live and zombie objects.  */)
      ()
 {
-  Lisp_Object args[7];
-  args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d");
+  Lisp_Object args[8], zombie_list = Qnil;
+  int i;
+  for (i = 0; i < nzombies; i++)
+    zombie_list = Fcons (zombies[i], zombie_list);
+  args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S");
   args[1] = make_number (ngcs);
   args[2] = make_float (avg_live);
   args[3] = make_float (avg_zombies);
   args[4] = make_float (avg_zombies / avg_live / 100);
   args[5] = make_number (max_live);
   args[6] = make_number (max_zombies);
-  return Fmessage (7, args);
+  args[7] = zombie_list;
+  return Fmessage (8, args);
 }
 
 #endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
@@ -3427,7 +3431,7 @@
 	{
 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
 	  if (nzombies < MAX_ZOMBIES)
-	    zombies[nzombies] = *p;
+	    zombies[nzombies] = obj;
 	  ++nzombies;
 #endif
 	  mark_object (&obj);
@@ -4342,7 +4346,8 @@
     double nlive = 0;
       
     for (i = 0; i < 7; ++i)
-      nlive += XFASTINT (XCAR (total[i]));
+      if (CONSP (total[i]))
+	nlive += XFASTINT (XCAR (total[i]));
 
     avg_live = (avg_live * ngcs + nlive) / (ngcs + 1);
     max_live = max (nlive, max_live);