It is hard to never detect the same event several time without painful
tests. In other words, the same termination event can be reported several
time and this must be handled. To do so, "tevt_report_event" macro is
updated to ignore an event if the last reported one is of the same type, for
the same location. Of course, if the same event is reported several times at
different moment, it will not be detected.
/* Must be used to report add an event in <_evt> termination events log.
* For now, it only handles 32-bits integers.
*/
-#define tevt_report_event(_evts, loc, type) ({ \
- \
- if (!((_evts) & 0xff000000)) { \
- (_evts) <<= 8; \
- (_evts) |= (loc) << 4; \
- (_evts) |= (type); \
- } \
- (_evts); \
+#define tevt_report_event(_evts, loc, type) ({ \
+ \
+ unsigned int _evt = ((loc) << 4) | (type); \
+ \
+ if (!((_evts) & 0xff000000) && \
+ (unsigned char)_evt != (unsigned char)(_evts)) { \
+ (_evts) <<= 8; \
+ (_evts) |= (loc) << 4; \
+ (_evts) |= (type); \
+ } \
+ (_evts); \
})
/* Function to convert a termination events log to a string */