summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorivmai <ivmai>2009-09-16 09:08:33 +0000
committerIvan Maidanski <ivmai@mail.ru>2011-07-26 21:06:46 +0400
commit8494af7a5e30a4129756de579e024cd0cfb46718 (patch)
tree086dfe431202ba4620bd3694fc889cd67ba5fc9e /finalize.c
parent41cf316c7387d9f09a0be4680de44008f4e5d488 (diff)
downloadbdwgc-8494af7a5e30a4129756de579e024cd0cfb46718.tar.gz
2009-09-16 Ivan Maidanski <ivmai@mail.ru>
(ivmai127.diff - superseding diff49) * alloc.c (GC_finish_collection): Call GC_print_finalization_stats if GC_print_stats (after getting "done_time"). * finalize.c (GC_old_dl_entries): New static variable (only if not SMALL_CONFIG). * finalize.c (GC_finalize): Save current GC_dl_entries value (only if not SMALL_CONFIG). * finalize.c (GC_print_finalization_stats): Define if and only if not SMALL_CONFIG; use GC_old_dl_entries value; use GC_log_printf() instead of GC_printf(); use "%lu" (instead of "%u") print format specifier; use unsigned long type for "ready" counter (for LP64 targets). * misc.c (GC_dump): No longer call GC_print_finalization_stats() here (since it is called from GC_finish_collection()). * misc.c (STACKBASE): Remove unused macro undef (for NOSYS and ECOS).
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/finalize.c b/finalize.c
index 032ec04b..287030a1 100644
--- a/finalize.c
+++ b/finalize.c
@@ -459,6 +459,10 @@ void GC_dump_finalization(void)
}
#endif
+#ifndef SMALL_CONFIG
+ STATIC word GC_old_dl_entries; /* for stats printing */
+#endif
+
extern unsigned GC_fail_count;
/* How many consecutive GC/expansion failures? */
/* Reset by GC_allochblk(); defined in alloc.c. */
@@ -505,6 +509,11 @@ void GC_finalize(void)
size_t dl_size = (log_dl_table_size == -1 ) ? 0 : (1 << log_dl_table_size);
size_t fo_size = (log_fo_table_size == -1 ) ? 0 : (1 << log_fo_table_size);
+# ifndef SMALL_CONFIG
+ /* Save current GC_dl_entries value for stats printing */
+ GC_old_dl_entries = GC_dl_entries;
+# endif
+
/* Make disappearing links disappear */
for (i = 0; i < dl_size; i++) {
curr_dl = dl_head[i];
@@ -897,17 +906,20 @@ GC_API void * GC_CALL GC_call_with_alloc_lock(GC_fn_type fn,
return(result);
}
-#if !defined(NO_DEBUGGING)
+#ifndef SMALL_CONFIG
void GC_print_finalization_stats(void)
{
struct finalizable_object *fo = GC_finalize_now;
- unsigned ready = 0;
+ unsigned long ready = 0;
- GC_printf("%u finalization table entries; %u disappearing links\n",
- (unsigned)GC_fo_entries, (unsigned)GC_dl_entries);
+ GC_log_printf(
+ "%lu finalization table entries; %lu disappearing links alive\n",
+ (unsigned long)GC_fo_entries, (unsigned long)GC_dl_entries);
for (; 0 != fo; fo = fo_next(fo)) ++ready;
- GC_printf("%u objects are eligible for immediate finalization\n", ready);
+ GC_log_printf("%lu objects are eligible for immediate finalization; "
+ "%ld links cleared\n",
+ ready, (long)GC_old_dl_entries - (long)GC_dl_entries);
}
-#endif /* NO_DEBUGGING */
+#endif /* SMALL_CONFIG */