mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
MINOR: compiler: implement an ONLY_ONCE() macro
There are regularly places, especially in config analysis, where we need to report certain things (warnings or errors) only once, but where implementing a counter is sufficiently deterrent so that it's not done. Let's add a simple ONLY_ONCE() macro that implements a static variable (char) which is atomically turned on, and returns true if it's set for the first time. This uses fairly compact code, a single byte of BSS and is thread-safe. There are probably a number of places in the config parser where this could be used. It may also be used to implement a WARN_ON() similar to BUG_ON() but which would only warn once.
This commit is contained in:
parent
dd56520cdf
commit
906f7daed1
@ -128,6 +128,14 @@
|
||||
*/
|
||||
#define DISGUISE(v) ({ typeof(v) __v = (v); ALREADY_CHECKED(__v); __v; })
|
||||
|
||||
/* Implements a static event counter where it's used. This is typically made to
|
||||
* report some warnings only once, either during boot or at runtime. It only
|
||||
* returns true on the very first call, and zero later. It's thread-safe and
|
||||
* uses a single byte of memory per call place. It relies on the atomic xchg
|
||||
* defined in atomic.h which is also part of the common API.
|
||||
*/
|
||||
#define ONLY_ONCE() ({ static char __cnt; !_HA_ATOMIC_XCHG(&__cnt, 1); })
|
||||
|
||||
/*
|
||||
* Gcc >= 3 provides the ability for the program to give hints to the
|
||||
* compiler about what branch of an if is most likely to be taken. This
|
||||
|
Loading…
Reference in New Issue
Block a user