From 5704f3a9ab774a18bfeb227607ead57e400cb90f Mon Sep 17 00:00:00 2001 From: rhaas Date: Wed, 16 May 2012 02:30:14 +0000 Subject: allocate large arrays on heap rather than stack, handle deleted timers git-svn-id: http://svn.cactuscode.org/arrangements/CactusUtils/TimerReport/trunk@46 d0051148-8e13-4bef-be1d-f6c572c85f9f --- src/Output.c | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Output.c b/src/Output.c index 03bd303..da895a0 100644 --- a/src/Output.c +++ b/src/Output.c @@ -309,9 +309,14 @@ static void OutputAllTimers (CCTK_ARGUMENTS) } else { + const char *name = CCTK_TimerName(i); + + if (name == NULL) + name = "(null)"; + CCTK_VWarn(1, __LINE__, __FILE__, CCTK_THORNSTRING, "Clock \"%s\" not found for timer #%d \"%s\"", - all_timers_clock, i, CCTK_TimerName(i)); + all_timers_clock, i, name); timer_secs = -1; } } @@ -635,7 +640,8 @@ static void PrintTopTimers (CCTK_ARGUMENTS) /* Note: Timer names are truncated to 100 characters for simplicity */ #define TIMERNAME_LENGTH 101 /* this includes the NUL character */ -static char (*compare_string_array)[TIMERNAME_LENGTH] = NULL; +typedef char timername_t[TIMERNAME_LENGTH]; +static timername_t *compare_string_array = NULL; static int compare_string(void const *const a, void const *const b) { int const ia = *(int const*)a; @@ -673,9 +679,16 @@ static int CollectTimerInfo(cGH const *restrict const cctkGH, } /* Determine local timer names and their values */ - char my_timernames[my_ntimers][TIMERNAME_LENGTH]; + timername_t *my_timernames = + malloc(my_ntimers * sizeof(*my_timernames)); /* these arrays can be too large for the stack */ + assert(my_timernames); for (int n=0; nsecs_avg = NULL; timers->secs_min = NULL; timers->secs_max = NULL; + free(all_timernames); + free(my_timernames); return 1; } @@ -810,6 +832,9 @@ static int CollectTimerInfo(cGH const *restrict const cctkGH, timers->secs_max[n] = maxval; } } + + free(all_timernames); + free(my_timernames); return 1; } -- cgit v1.2.3