summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
cdfe9b0)
If you compiled a program with -ticky and ran it with:
./foo +RTS -rstderr -RTS
the result would be a segfault. This was because the RTS interprets stderr to
mean "use debugBelch to print out messages," and sets the ticky file pointer
to NULL as a result, but PrintTickyInfo (the function in Ticky.c that prints
out the ticky report) wasn't checking for NULL.
I changed PrintTickyInfo to check whether the ticky file pointer is NULL and
output to stderr if so.
Also removed an unused import from CodeOutput.lhs.
import HscTypes
import DynFlags
import HscTypes
import DynFlags
-import StaticFlags ( opt_DoTickyProfiling )
-
import ErrUtils ( dumpIfSet_dyn, showPass, ghcExit )
import Outputable
import Pretty ( Mode(..), printDoc )
import ErrUtils ( dumpIfSet_dyn, showPass, ghcExit )
import Outputable
import Pretty ( Mode(..), printDoc )
FILE *tf = RtsFlags.TickyFlags.tickyFile;
FILE *tf = RtsFlags.TickyFlags.tickyFile;
+ /* If tf = NULL, that means the user passed in stderr for the ticky stats
+ file. According to a comment in RtsFlags.c, this means to use
+ debugBelch to print out messages. But this function prints out a lot
+ of stuff so in order to avoid changing a lot of code, we just dump
+ the same output to stderr (for now). */
+ if( tf == NULL )
+ tf = stderr;
+
/* krc: avoid dealing with this just now */
#if FALSE
fprintf(tf,"\n\nALLOCATIONS: %ld (%ld words total: %ld admin, %ld goods, %ld slop)\n",
/* krc: avoid dealing with this just now */
#if FALSE
fprintf(tf,"\n\nALLOCATIONS: %ld (%ld words total: %ld admin, %ld goods, %ld slop)\n",