[...] Okay I think, I got it, let me dig a little further ...
+void trace_record_finish(TraceBufferRecord *rec) { - trace(event, x1, x2, x3, x4, x5, x6); + uint8_t temp_rec[sizeof(TraceRecord)]; + TraceRecord *record = (TraceRecord *) temp_rec; + read_from_buffer(rec->tbuf_idx, temp_rec, sizeof(TraceRecord)); + __sync_synchronize(); /* write barrier before marking as valid */ + record->event |= TRACE_RECORD_VALID; + write_to_buffer(rec->tbuf_idx, temp_rec, sizeof(TraceRecord)); + + if ((trace_idx> writeout_idx)&& + (trace_idx - writeout_idx)> TRACE_BUF_FLUSH_THRESHOLD) { + flush_trace_file(false); + } else if ((writeout_idx> trace_idx)&& + (trace_idx> TRACE_BUF_FLUSH_THRESHOLD)) {
I guess this was the culprit ^ .. Harsh