From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathieu.desnoyers@polymtl.ca (Mathieu Desnoyers) Date: Wed, 18 Feb 2009 00:31:31 -0500 Subject: [ltt-dev] [PATCH] Fix bug in lttv from 0.12.0 to 0.12.10 Message-ID: <20090218053131.GA32359@Krystal> Hi, I found a nasty event id / timetamping bug in lttv. Basically, when enough events were registered in a channel to come up to IDs 29, 30 and 31, there were side-effects on how the timestamp update was done for the specific event because the event id was overwritten by the case 29: in the switch() before the test done later in a if() statement. LTTV 0.12.11 fixes this. For reference, here is the diff. Mathieu, getting back to timestamp-sanity land. Index: tracefile.c =================================================================== --- tracefile.c (revision 3321) +++ tracefile.c (working copy) @@ -1256,6 +1256,7 @@ void * pos; LttEvent *event; void *pos_aligned; + guint16 packed_evid; /* event id reader from the 5 bits in header */ event = &tf->event; pos = tf->buffer.head + event->offset; @@ -1267,11 +1268,11 @@ pos_aligned = pos; event->timestamp = ltt_get_uint32(LTT_GET_BO(tf), pos); - event->event_id = event->timestamp >> tf->tscbits; + event->event_id = packed_evid = event->timestamp >> tf->tscbits; event->timestamp = event->timestamp & tf->tsc_mask; pos += sizeof(guint32); - switch (event->event_id) { + switch (packed_evid) { case 29: /* LTT_RFLAG_ID_SIZE_TSC */ event->event_id = ltt_get_uint16(LTT_GET_BO(tf), pos); pos += sizeof(guint16); @@ -1305,7 +1306,7 @@ break; } - if (likely(event->event_id != 29)) { + if (likely(packed_evid != 29)) { /* No extended timestamp */ if (event->timestamp < (tf->buffer.tsc & tf->tsc_mask)) tf->buffer.tsc = ((tf->buffer.tsc & ~tf->tsc_mask) /* overflow */ -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68