diff options
| author | Dave Love | 2003-01-21 16:56:38 +0000 |
|---|---|---|
| committer | Dave Love | 2003-01-21 16:56:38 +0000 |
| commit | 83fc9c63ea72d892d0d0b315a4dee478f3e71934 (patch) | |
| tree | 120483f118b4e186d8d9181abb25ed09f1008fd8 /src | |
| parent | 69f5d6fedec1672b84940bf06e6878020f310522 (diff) | |
| download | emacs-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')
| -rw-r--r-- | src/ChangeLog | 12 | ||||
| -rw-r--r-- | src/alloc.c | 15 |
2 files changed, 22 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 5303b23abd2..b08445ecd46 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,15 @@ | |||
| 1 | 2003-01-21 Dave Love <fx@gnu.org> | ||
| 2 | |||
| 3 | * alloc.c (Fgc_status): Print zombie list. | ||
| 4 | (mark_maybe_object) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]: | ||
| 5 | Fix assignment of zombies. | ||
| 6 | (Fgarbage_collect) [GC_MARK_STACK==GC_USE_GCPROS_CHECK_ZOMBIES]: | ||
| 7 | Don't take car of non-cons. | ||
| 8 | |||
| 9 | * s/sol2-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define. | ||
| 10 | |||
| 11 | * s/sunos4-0.h (GC_SETJMP_WORKS, GC_MARK_STACK): Define. | ||
| 12 | |||
| 1 | 2003-01-20 David Ponce <david@dponce.com> | 13 | 2003-01-20 David Ponce <david@dponce.com> |
| 2 | 14 | ||
| 3 | * w32menu.c (digest_single_submenu): Declare all args. | 15 | * w32menu.c (digest_single_submenu): Declare all args. |
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); |