From cbd898c42ba8a15bf0023ae65381be2b50310c75 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 20 Jan 2025 15:35:47 +0100 Subject: [PATCH] MINOR: tevt: Don't duplicate termination event during reporting 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. --- include/haproxy/connection.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/include/haproxy/connection.h b/include/haproxy/connection.h index c0ed51e5d..33607ea3a 100644 --- a/include/haproxy/connection.h +++ b/include/haproxy/connection.h @@ -746,14 +746,17 @@ static inline int conn_pr_mode_to_proto_mode(int proxy_mode) /* 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 */