aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorDave Love2003-01-21 16:56:38 +0000
committerDave Love2003-01-21 16:56:38 +0000
commit83fc9c63ea72d892d0d0b315a4dee478f3e71934 (patch)
tree120483f118b4e186d8d9181abb25ed09f1008fd8 /src/alloc.c
parent69f5d6fedec1672b84940bf06e6878020f310522 (diff)
downloademacs-83fc9c63ea72d892d0d0b315a4dee478f3e71934.tar.gz
emacs-83fc9c63ea72d892d0d0b315a4dee478f3e71934.zip
(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.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/alloc.c b/src/alloc.c
index c61a0d9fa83..10c4f6f235d 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3337,15 +3337,19 @@ DEFUN ("gc-status", Fgc_status, Sgc_status, 0, 0, "",
3337 doc: /* Show information about live and zombie objects. */) 3337 doc: /* Show information about live and zombie objects. */)
3338 () 3338 ()
3339{ 3339{
3340 Lisp_Object args[7]; 3340 Lisp_Object args[8], zombie_list = Qnil;
3341 args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d"); 3341 int i;
3342 for (i = 0; i < nzombies; i++)
3343 zombie_list = Fcons (zombies[i], zombie_list);
3344 args[0] = build_string ("%d GCs, avg live/zombies = %.2f/%.2f (%f%%), max %d/%d\nzombies: %S");
3342 args[1] = make_number (ngcs); 3345 args[1] = make_number (ngcs);
3343 args[2] = make_float (avg_live); 3346 args[2] = make_float (avg_live);
3344 args[3] = make_float (avg_zombies); 3347 args[3] = make_float (avg_zombies);
3345 args[4] = make_float (avg_zombies / avg_live / 100); 3348 args[4] = make_float (avg_zombies / avg_live / 100);
3346 args[5] = make_number (max_live); 3349 args[5] = make_number (max_live);
3347 args[6] = make_number (max_zombies); 3350 args[6] = make_number (max_zombies);
3348 return Fmessage (7, args); 3351 args[7] = zombie_list;
3352 return Fmessage (8, args);
3349} 3353}
3350 3354
3351#endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */ 3355#endif /* GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES */
@@ -3427,7 +3431,7 @@ mark_maybe_object (obj)
3427 { 3431 {
3428#if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES 3432#if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
3429 if (nzombies < MAX_ZOMBIES) 3433 if (nzombies < MAX_ZOMBIES)
3430 zombies[nzombies] = *p; 3434 zombies[nzombies] = obj;
3431 ++nzombies; 3435 ++nzombies;
3432#endif 3436#endif
3433 mark_object (&obj); 3437 mark_object (&obj);
@@ -4342,7 +4346,8 @@ Garbage collection happens automatically if you cons more than
4342 double nlive = 0; 4346 double nlive = 0;
4343 4347
4344 for (i = 0; i < 7; ++i) 4348 for (i = 0; i < 7; ++i)
4345 nlive += XFASTINT (XCAR (total[i])); 4349 if (CONSP (total[i]))
4350 nlive += XFASTINT (XCAR (total[i]));
4346 4351
4347 avg_live = (avg_live * ngcs + nlive) / (ngcs + 1); 4352 avg_live = (avg_live * ngcs + nlive) / (ngcs + 1);
4348 max_live = max (nlive, max_live); 4353 max_live = max (nlive, max_live);