From 7c7d1f66d35f73a2faa898a33aa80cd276159dc2 Mon Sep 17 00:00:00 2001 From: Ben Gamari <ben@smart-cactus.org> Date: Wed, 28 Jun 2023 15:17:45 -0400 Subject: [PATCH] rts/Trace: Ensure that debugTrace arguments are used As debugTrace is a macro we must take care to ensure that the fact is clear to the compiler lest we see warnings. --- rts/Schedule.c | 14 +++++++++----- rts/Trace.h | 21 ++++++++++----------- rts/sm/GC.c | 2 ++ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/rts/Schedule.c b/rts/Schedule.c index 685862a08ba7..093ee61d0802 100644 --- a/rts/Schedule.c +++ b/rts/Schedule.c @@ -1160,9 +1160,11 @@ scheduleHandleHeapOverflow( Capability *cap, StgTSO *t ) barf("allocation of %ld bytes too large (GHC should have complained at compile-time)", (long)cap->r.rHpAlloc); } +#if defined(DEBUG) debugTrace(DEBUG_sched, "--<< thread %ld (%s) stopped: requesting a large block (size %ld)\n", (long)t->id, what_next_strs[t->what_next], blocks); +#endif // don't do this if the nursery is (nearly) full, we'll GC first. if (cap->r.rCurrentNursery->link != NULL || @@ -1231,9 +1233,11 @@ scheduleHandleYield( Capability *cap, StgTSO *t, uint32_t prev_what_next ) // Shortcut if we're just switching evaluators: just run the thread. See // Note [avoiding threadPaused] in Interpreter.c. if (t->what_next != prev_what_next) { +#if defined(DEBUG) debugTrace(DEBUG_sched, "--<< thread %ld (%s) stopped to switch evaluators", (long)t->id, what_next_strs[t->what_next]); +#endif return true; } @@ -1806,7 +1810,7 @@ scheduleDoGC (Capability **pcap, Task *task USED_IF_THREADS, } } } - debugTrace(DEBUG_sched, "%d idle caps", n_idle_caps); + debugTrace(DEBUG_sched, "%d idle caps, %d failed grabs", n_idle_caps, n_failed_trygrab_idles); for (i=0; i < n_capabilities; i++) { NONATOMIC_ADD(&getCapability(i)->idle, 1); @@ -2643,7 +2647,6 @@ void scheduleWaitThread (StgTSO* tso, /*[out]*/HaskellObj* ret, Capability **pcap) { Task *task; - DEBUG_ONLY( StgThreadID id ); Capability *cap; cap = *pcap; @@ -2662,8 +2665,9 @@ scheduleWaitThread (StgTSO* tso, /*[out]*/HaskellObj* ret, Capability **pcap) appendToRunQueue(cap,tso); - DEBUG_ONLY( id = tso->id ); - debugTrace(DEBUG_sched, "new bound thread (%" FMT_StgThreadID ")", id); + DEBUG_ONLY( + debugTrace(DEBUG_sched, "new bound thread (%" FMT_StgThreadID ")", (StgThreadID) tso->id); + ); // As the TSO is bound and on the run queue, schedule() will run the TSO. cap = schedule(cap,task); @@ -2671,7 +2675,7 @@ scheduleWaitThread (StgTSO* tso, /*[out]*/HaskellObj* ret, Capability **pcap) ASSERT(task->incall->rstat != NoStatus); ASSERT_FULL_CAPABILITY_INVARIANTS(cap,task); - debugTrace(DEBUG_sched, "bound thread (%" FMT_StgThreadID ") finished", id); + debugTrace(DEBUG_sched, "bound thread (%" FMT_StgThreadID ") finished", (StgThreadID) tso->id); *pcap = cap; } diff --git a/rts/Trace.h b/rts/Trace.h index 3cec74cfa9a4..a352956748af 100644 --- a/rts/Trace.h +++ b/rts/Trace.h @@ -235,26 +235,25 @@ void traceThreadLabel_(Capability *cap, char *label, size_t len); + +#if defined(DEBUG) +#define DEBUG_RTS 1 +#else +#define DEBUG_RTS 0 +#endif + /* * Emit a debug message (only when DEBUG is defined) */ -#if defined(DEBUG) #define debugTrace(class, msg, ...) \ - if (RTS_UNLIKELY(class)) { \ + if (DEBUG_RTS && RTS_UNLIKELY(class)) { \ trace_(msg, ##__VA_ARGS__); \ } -#else -#define debugTrace(class, str, ...) /* nothing */ -#endif -#if defined(DEBUG) -#define debugTraceCap(class, cap, msg, ...) \ - if (RTS_UNLIKELY(class)) { \ +#define debugTraceCap(class, cap, msg, ...) \ + if (DEBUG_RTS && RTS_UNLIKELY(class)) { \ traceCap_(cap, msg, ##__VA_ARGS__); \ } -#else -#define debugTraceCap(class, cap, str, ...) /* nothing */ -#endif /* * Emit a message/event describing the state of a thread diff --git a/rts/sm/GC.c b/rts/sm/GC.c index 8f2f927af1ac..4a1381097a5c 100644 --- a/rts/sm/GC.c +++ b/rts/sm/GC.c @@ -691,6 +691,7 @@ GarbageCollect (struct GcConfig config, } copied += mut_list_size; +#if defined(DEBUG) debugTrace(DEBUG_gc, "mut_list_size: %lu (%d vars, %d arrays, %d MVARs, %d TVARs, %d TVAR_WATCH_QUEUEs, %d TREC_CHUNKs, %d TREC_HEADERs, %d others)", (unsigned long)(mut_list_size * sizeof(W_)), @@ -702,6 +703,7 @@ GarbageCollect (struct GcConfig config, mutlist_scav_stats.n_TREC_CHUNK, mutlist_scav_stats.n_TREC_HEADER, mutlist_scav_stats.n_OTHERS); +#endif } bdescr *next, *prev; -- GitLab