Commit 9ac03f0b authored by Simon Marlow's avatar Simon Marlow
Browse files

FIX #2234: don't generate <prog>.prof unless we're going to put something in it

parent dcf739bd
......@@ -268,34 +268,44 @@ ccsSetSelected( CostCentreStack *ccs )
static void
initProfilingLogFile(void)
{
/* Initialise the log file name */
prof_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
sprintf(prof_filename, "%s.prof", prog_name);
/* open the log file */
if ((prof_file = fopen(prof_filename, "w")) == NULL) {
debugBelch("Can't open profiling report file %s\n", prof_filename);
RtsFlags.CcFlags.doCostCentres = 0;
// The following line was added by Sung; retainer/LDV profiling may need
// two output files, i.e., <program>.prof/hp.
if (RtsFlags.ProfFlags.doHeapProfile == HEAP_BY_RETAINER)
RtsFlags.ProfFlags.doHeapProfile = 0;
return;
if (RtsFlags.CcFlags.doCostCentres == 0 &&
RtsFlags.ProfFlags.doHeapProfile != HEAP_BY_RETAINER)
{
/* No need for the <prog>.prof file */
prof_filename = NULL;
prof_file = NULL;
}
if (RtsFlags.CcFlags.doCostCentres == COST_CENTRES_XML) {
/* dump the time, and the profiling interval */
fprintf(prof_file, "\"%s\"\n", time_str());
fprintf(prof_file, "\"%d ms\"\n", RtsFlags.MiscFlags.tickInterval);
/* declare all the cost centres */
{
CostCentre *cc;
for (cc = CC_LIST; cc != NULL; cc = cc->link) {
fprintf(prof_file, "%d %ld \"%s\" \"%s\"\n",
CC_UQ, cc->ccID, cc->label, cc->module);
}
}
else
{
/* Initialise the log file name */
prof_filename = arenaAlloc(prof_arena, strlen(prog_name) + 6);
sprintf(prof_filename, "%s.prof", prog_name);
/* open the log file */
if ((prof_file = fopen(prof_filename, "w")) == NULL) {
debugBelch("Can't open profiling report file %s\n", prof_filename);
RtsFlags.CcFlags.doCostCentres = 0;
// The following line was added by Sung; retainer/LDV profiling may need
// two output files, i.e., <program>.prof/hp.
if (RtsFlags.ProfFlags.doHeapProfile == HEAP_BY_RETAINER)
RtsFlags.ProfFlags.doHeapProfile = 0;
return;
}
if (RtsFlags.CcFlags.doCostCentres == COST_CENTRES_XML) {
/* dump the time, and the profiling interval */
fprintf(prof_file, "\"%s\"\n", time_str());
fprintf(prof_file, "\"%d ms\"\n", RtsFlags.MiscFlags.tickInterval);
/* declare all the cost centres */
{
CostCentre *cc;
for (cc = CC_LIST; cc != NULL; cc = cc->link) {
fprintf(prof_file, "%d %ld \"%s\" \"%s\"\n",
CC_UQ, cc->ccID, cc->label, cc->module);
}
}
}
}
if (RtsFlags.ProfFlags.doHeapProfile) {
......
......@@ -499,7 +499,7 @@ hs_exit_(rtsBool wait_foreign)
// Originally, this was in report_ccs_profiling(). Now, retainer
// profiling might tack some extra stuff on to the end of this file
// during endProfiling().
fclose(prof_file);
if (prof_file != NULL) fclose(prof_file);
#endif
#if defined(TICKY_TICKY)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment