From d9d8ab1594dd83d25708dc0d20dfd8e068f1c2e3 Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 25 Jul 2002 18:37:00 +0000 Subject: [PATCH] [project @ 2002-07-25 18:36:59 by sof] Expose printAllThreads() in non-DEBUG builds; of some use when debugging ConcHask code and want a dump of the current state of the system's threads. Not provided via a library, so to use, do foreign import call unsafe printAllThreads :: IO () --- ghc/rts/Schedule.c | 19 ++++++++++++------- ghc/rts/Schedule.h | 12 +++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/ghc/rts/Schedule.c b/ghc/rts/Schedule.c index da57bec..2e2bbec 100644 --- a/ghc/rts/Schedule.c +++ b/ghc/rts/Schedule.c @@ -1,5 +1,5 @@ /* --------------------------------------------------------------------------- - * $Id: Schedule.c,v 1.150 2002/07/19 18:45:21 sof Exp $ + * $Id: Schedule.c,v 1.151 2002/07/25 18:36:59 sof Exp $ * * (c) The GHC Team, 1998-2000 * @@ -84,6 +84,7 @@ #include "StgRun.h" #include "StgStartup.h" #include "Hooks.h" +#define COMPILING_SCHEDULER #include "Schedule.h" #include "StgMiscClosures.h" #include "Storage.h" @@ -3549,11 +3550,12 @@ detectBlackHoles( void ) //@subsection Debugging Routines /* ----------------------------------------------------------------------------- - Debugging: why is a thread blocked + * Debugging: why is a thread blocked + * [Also provides useful information when debugging threaded programs + * at the Haskell source code level, so enable outside of DEBUG. --sof 7/02] -------------------------------------------------------------------------- */ -#ifdef DEBUG - +static void printThreadBlockage(StgTSO *tso) { @@ -3601,6 +3603,7 @@ printThreadBlockage(StgTSO *tso) } } +static void printThreadStatus(StgTSO *tso) { @@ -3627,15 +3630,15 @@ printAllThreads(void) ullong_format_string(TIME_ON_PROC(CurrentProc), time_string, rtsFalse/*no commas!*/); - sched_belch("all threads at [%s]:", time_string); + fprintf(stderr, "all threads at [%s]:\n", time_string); # elif defined(PAR) char time_string[TIME_STR_LEN], node_str[NODE_STR_LEN]; ullong_format_string(CURRENT_TIME, time_string, rtsFalse/*no commas!*/); - sched_belch("all threads at [%s]:", time_string); + fprintf(stderr,"all threads at [%s]:\n", time_string); # else - sched_belch("all threads:"); + fprintf(stderr,"all threads:\n"); # endif for (t = all_threads; t != END_TSO_QUEUE; t = t->global_link) { @@ -3647,6 +3650,8 @@ printAllThreads(void) } } +#ifdef DEBUG + /* Print a whole blocking queue attached to node (debugging only). */ diff --git a/ghc/rts/Schedule.h b/ghc/rts/Schedule.h index 0ddf00f..7722802 100644 --- a/ghc/rts/Schedule.h +++ b/ghc/rts/Schedule.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Schedule.h,v 1.34 2002/06/19 20:45:15 sof Exp $ + * $Id: Schedule.h,v 1.35 2002/07/25 18:37:00 sof Exp $ * * (c) The GHC Team 1998-1999 * @@ -183,14 +183,16 @@ typedef struct StgMainThread_ { */ extern StgMainThread *main_threads; +void printAllThreads(void); +#ifdef COMPILING_SCHEDULER +static void printThreadBlockage(StgTSO *tso); +static void printThreadStatus(StgTSO *tso); +#endif /* debugging only */ #ifdef DEBUG -void printThreadBlockage(StgTSO *tso); -void printThreadStatus(StgTSO *tso); -void printAllThreads(void); -#endif void print_bq (StgClosure *node); +#endif #if defined(PAR) void print_bqe (StgBlockingQueueElement *bqe); #endif -- 1.7.10.4