From: Ivan Maidanski Date: Fri, 28 Oct 2016 08:45:48 +0000 (+0300) Subject: Eliminate duplicate log messages in GC_mark_from X-Git-Tag: v7.4.6~219 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fdb39b6aa9c5300db304ea4b8636c760f4cbff69;p=gc Eliminate duplicate log messages in GC_mark_from (Cherry-pick commit ecf300b from 'release-7_6' branch.) This change also eliminates 'bad copy-paste' code defect in GC_mark_from. * mark.c [ENABLE_TRACE] (GC_mark_from): Combine 2 logged messages about "large section" and "splitting" into a single one; replace "Tracing from" logged message with "small object" message (which is not logged for large objects). --- diff --git a/mark.c b/mark.c index c52fc69b..47ad2a77 100644 --- a/mark.c +++ b/mark.c @@ -649,13 +649,6 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack, || (word)(current_p + descr) <= (word)GC_least_plausible_heap_addr || (word)current_p >= (word)GC_greatest_plausible_heap_addr); -# ifdef ENABLE_TRACE - if ((word)GC_trace_addr >= (word)current_p - && (word)GC_trace_addr < (word)(current_p + descr)) { - GC_log_printf("GC #%u: large section; start %p, len %lu\n", - (unsigned)GC_gc_no, current_p, (unsigned long)descr); - } -# endif /* ENABLE_TRACE */ # ifdef PARALLEL_MARK # define SHARE_BYTES 2048 if (descr > SHARE_BYTES && GC_parallel @@ -669,10 +662,13 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack, # ifdef ENABLE_TRACE if ((word)GC_trace_addr >= (word)current_p && (word)GC_trace_addr < (word)(current_p + descr)) { - GC_log_printf("GC #%u: splitting (parallel) %p at %p\n", - (unsigned)GC_gc_no, current_p, current_p + new_size); + GC_log_printf("GC #%u: large section; start %p, len %lu," + " splitting (parallel) at %p\n", + (unsigned)GC_gc_no, (void *)current_p, + (unsigned long)descr, + (void *)(current_p + new_size)); } -# endif /* ENABLE_TRACE */ +# endif current_p += new_size; descr -= new_size; goto retry; @@ -685,10 +681,12 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack, # ifdef ENABLE_TRACE if ((word)GC_trace_addr >= (word)current_p && (word)GC_trace_addr < (word)(current_p + descr)) { - GC_log_printf("GC #%u: splitting %p at %p\n", - (unsigned)GC_gc_no, current_p, limit); + GC_log_printf("GC #%u: large section; start %p, len %lu," + " splitting at %p\n", + (unsigned)GC_gc_no, (void *)current_p, + (unsigned long)descr, (void *)limit); } -# endif /* ENABLE_TRACE */ +# endif /* Make sure that pointers overlapping the two ranges are */ /* considered. */ limit += sizeof(word) - ALIGNMENT; @@ -802,15 +800,16 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack, if (descr < sizeof(word)) continue; # endif - limit = current_p + (word)descr; - } -# ifdef ENABLE_TRACE +# ifdef ENABLE_TRACE if ((word)GC_trace_addr >= (word)current_p - && (word)GC_trace_addr < (word)limit) { - GC_log_printf("GC #%u: Tracing from %p, length is %lu\n", - (unsigned)GC_gc_no, current_p, (unsigned long)descr); + && (word)GC_trace_addr < (word)(current_p + descr)) { + GC_log_printf("GC #%u: small object; start %p, len %lu\n", + (unsigned)GC_gc_no, (void *)current_p, + (unsigned long)descr); } -# endif /* ENABLE_TRACE */ +# endif + limit = current_p + (word)descr; + } /* The simple case in which we're scanning a range. */ GC_ASSERT(!((word)current_p & (ALIGNMENT-1))); credit -= limit - current_p;