[...]

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


Reply via email to