mirror of
https://github.com/haproxy/haproxy.git
synced 2026-04-15 21:59:41 -04:00
BUG/MEDIUM: mt_list: Use atomic operations to prevent compiler optims
As a folow-up tof40f5401b9, explicitely use atomic operations to set the prev and next fields, to make sure the compiler can't assume anything about it, and just does it. This should be backported afterf40f5401b9up to 2.8.
This commit is contained in:
parent
2ec6df59bf
commit
837351245a
1 changed files with 6 additions and 6 deletions
|
|
@ -264,8 +264,8 @@ static inline __attribute__((always_inline)) unsigned long mt_list_cpu_relax(uns
|
|||
*/
|
||||
static inline struct mt_list *mt_list_init(struct mt_list *el)
|
||||
{
|
||||
el->next = el;
|
||||
el->prev = el;
|
||||
__atomic_store_n(&el->next, el, __ATOMIC_RELAXED);
|
||||
__atomic_store_n(&el->prev, el, __ATOMIC_RELAXED);
|
||||
return el;
|
||||
}
|
||||
|
||||
|
|
@ -491,8 +491,8 @@ static MT_INLINE struct mt_list *mt_list_behead(struct mt_list *lh)
|
|||
break;
|
||||
}
|
||||
|
||||
lh->next = lh;
|
||||
lh->prev = lh;
|
||||
__atomic_store_n(&lh->next, lh, __ATOMIC_RELAXED);
|
||||
__atomic_store_n(&lh->prev, lh, __ATOMIC_RELAXED);
|
||||
__atomic_thread_fence(__ATOMIC_RELEASE);
|
||||
|
||||
n->prev = p;
|
||||
|
|
@ -645,8 +645,8 @@ static MT_INLINE long mt_list_delete(struct mt_list *el)
|
|||
* somebody may be using it already.
|
||||
*/
|
||||
if (el != n) {
|
||||
el->prev = el;
|
||||
el->next = el;
|
||||
__atomic_store_n(&el->prev, el, __ATOMIC_RELAXED);
|
||||
__atomic_store_n(&el->next, el, __ATOMIC_RELAXED);
|
||||
__atomic_thread_fence(__ATOMIC_RELEASE);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue