rts: Flush eventlog in hs_init_ghc (fixes #15440)
authorMitsutoshi Aoe <maoe@foldr.in>
Thu, 26 Jul 2018 05:50:51 +0000 (14:50 +0900)
committerBen Gamari <ben@smart-cactus.org>
Mon, 30 Jul 2018 21:46:45 +0000 (17:46 -0400)
Without this change RTS typically doesn't flush some important
events until the process terminates or it doesn't write them at
all in case it terminates abnormally.

Here is a list of such events:

* EVENT_WALL_CLOCK_TIME
* EVENT_OS_PROCESS_PID
* EVENT_OS_PROCESS_PPID
* EVENT_RTS_IDENTIFIER
* EVENT_PROGRAM_ARGS
* EVENT_PROGRAM_ENV

(cherry picked from commit 7a3e1b25ff9a570851a59c4cf3600daa49867b9b)

rts/RtsStartup.c
rts/Trace.c
rts/Trace.h

index 7eb98a8..0cb1ff9 100644 (file)
@@ -237,6 +237,7 @@ hs_init_ghc(int *argc, char **argv[], RtsConfig rts_config)
     /* Trace some basic information about the process */
     traceWallClockTime();
     traceOSProcessInfo();
+    flushTrace();
 
     /* initialize the storage manager */
     initStorage();
index 71403f8..02c177f 100644 (file)
@@ -130,6 +130,13 @@ void resetTracing (void)
     }
 }
 
+void flushTrace (void)
+{
+    if (eventlog_enabled) {
+        flushEventLog();
+    }
+}
+
 void tracingAddCapapilities (uint32_t from, uint32_t to)
 {
     if (eventlog_enabled) {
index a72248a..d53e92c 100644 (file)
@@ -295,6 +295,8 @@ void traceHeapProfSampleCostCentre(StgWord8 profile_id,
                                    CostCentreStack *stack, StgWord residency);
 #endif /* PROFILING */
 
+void flushTrace(void);
+
 #else /* !TRACING */
 
 #define traceSchedEvent(cap, tag, tso, other) /* nothing */
@@ -331,6 +333,8 @@ void traceHeapProfSampleCostCentre(StgWord8 profile_id,
 #define traceHeapProfSampleCostCentre(profile_id, stack, residency) /* nothing */
 #define traceHeapProfSampleString(profile_id, label, residency) /* nothing */
 
+#define flushTrace() /* nothing */
+
 #endif /* TRACING */
 
 // If DTRACE is enabled, but neither DEBUG nor TRACING, we need a C land