mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-31 15:47:10 +00:00
MINOR: list: add new macro LIST_INLIST_ATOMIC()
This macro is similar to LIST_INLIST() except that it is guaranteed to perform the test atomically, so that even if LIST_INLIST() is intrumented with debugging code to perform extra consistency checks, it will not fail when used in the context of barriers and atomic ops.
This commit is contained in:
parent
9628c42284
commit
c79f014972
@ -101,6 +101,18 @@
|
||||
*/
|
||||
#define LIST_INLIST(el) ((el)->n != (el))
|
||||
|
||||
/* atomically checks if the list element's next pointer points to anything
|
||||
* different from itself, implying the element should be part of a list. This
|
||||
* usually is similar to LIST_INLIST() except that while that one might be
|
||||
* instrumented using debugging code to perform further consistency checks,
|
||||
* the macro below guarantees to always perform a single atomic test and is
|
||||
* safe to use with barriers.
|
||||
*/
|
||||
#define LIST_INLIST_ATOMIC(el) ({ \
|
||||
typeof(el) __ptr = (el); \
|
||||
HA_ATOMIC_LOAD(&(__ptr)->n) != __ptr; \
|
||||
})
|
||||
|
||||
/* returns a pointer of type <pt> to a structure following the element
|
||||
* which contains list head <lh>, which is known as element <el> in
|
||||
* struct pt.
|
||||
|
Loading…
Reference in New Issue
Block a user