summaryrefslogtreecommitdiff
path: root/rts/Hpc.c
diff options
context:
space:
mode:
authorandy@galois.com <unknown>2007-09-17 23:06:41 +0000
committerandy@galois.com <unknown>2007-09-17 23:06:41 +0000
commitb2acf7a7179f08f7e4099799180017825154567d (patch)
tree5390b455eff5c6d9e922af814e276be468bdc049 /rts/Hpc.c
parent0578dfbc6a7eefd85ba4e6a4ad23d101060d86c3 (diff)
downloadhaskell-b2acf7a7179f08f7e4099799180017825154567d.tar.gz
Writing out .tix file only if you are the original process, not a child.
This lets us gain coverage on programs that use fork, like xmonad. * To be merged to STABLE *
Diffstat (limited to 'rts/Hpc.c')
-rw-r--r--rts/Hpc.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/rts/Hpc.c b/rts/Hpc.c
index bc9ba0e29a..0b327f1e5e 100644
--- a/rts/Hpc.c
+++ b/rts/Hpc.c
@@ -23,6 +23,8 @@
*/
static int hpc_inited = 0; // Have you started this component?
+static pid_t hpc_pid = 0; // pid of this process at hpc-boot time.
+ // Only this pid will read or write .tix file(s).
static FILE *tixFile; // file being read/written
static int tix_ch; // current char
@@ -167,6 +169,7 @@ static void hpc_init(void) {
return;
}
hpc_inited = 1;
+ hpc_pid = getpid();
tixFilename = (char *) malloc(strlen(prog_name) + 6);
sprintf(tixFilename, "%s.tix", prog_name);
@@ -321,8 +324,14 @@ exitHpc(void) {
return;
}
- FILE *f = fopen(tixFilename,"w");
- writeTix(f);
+ // Only write the tix file if you are the original process.
+ // Any sub-process from use of fork from inside Haskell will
+ // not clober the .tix file.
+
+ if (hpc_pid == getpid()) {
+ FILE *f = fopen(tixFilename,"w");
+ writeTix(f);
+ }
}
//////////////////////////////////////////////////////////////////////////////