summaryrefslogtreecommitdiff
path: root/rts/ProfHeap.h
diff options
context:
space:
mode:
authorThomas Miedema <thomasmiedema@gmail.com>2016-01-26 01:11:49 +0100
committerThomas Miedema <thomasmiedema@gmail.com>2016-01-26 16:07:38 +0100
commit6d2bdfd8d40b926d7a11d003213220022a63d9f5 (patch)
treeea341dea370944be87b6aecdc96d066aac03fddb /rts/ProfHeap.h
parente24a9b5de00bc2669a52a1f9905bd40e7be0d857 (diff)
downloadhaskell-6d2bdfd8d40b926d7a11d003213220022a63d9f5.tar.gz
Fix segmentation fault when .prof file not writeable
There are two ways to do retainer profiling. Quoting from the user's guide: 1. `+RTS -hr` "Breaks down the graph by retainer set" 2. `+RTS -hr<cc> -h<x>`, where `-h<x>` is one of normal heap profiling break-down options (e.g. `-hc`), and `-hr<cc> means "Restrict the profile to closures with retainer sets containing cost-centre stacks with one of the specified cost centres at the top." Retainer profiling writes to a .hp file, like the other heap profiling options, but also to a .prof file. Therefore, when the .prof file is not writeable for whatever reason, retainer profiling should be turned off completely. This worked ok when running the program with `+RTS -hr` (option 1), but a segfault would occur when using `+RTS -hr<cc> -h<x>`, with `x!=r` (option 2). This commit fixes that. Reviewed by: bgamari Differential Revision: https://phabricator.haskell.org/D1849 GHC Trac Issues: #11489
Diffstat (limited to 'rts/ProfHeap.h')
-rw-r--r--rts/ProfHeap.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/rts/ProfHeap.h b/rts/ProfHeap.h
index e29a9f6974..279eef2bf9 100644
--- a/rts/ProfHeap.h
+++ b/rts/ProfHeap.h
@@ -16,6 +16,11 @@ nat initHeapProfiling (void);
void endHeapProfiling (void);
rtsBool strMatchesSelector (const char* str, const char* sel);
+#ifdef PROFILING
+// doingRetainerProfiling: `-hr` or `-hr<cc> -h<x>`
+rtsBool doingRetainerProfiling(void);
+#endif
+
#include "EndPrivate.h"
#endif /* PROFHEAP_H */