MINOR: xref: Add missing barriers.

Add a few missing barriers in the xref code, it's unlikely to be a problem
for x86, but may be on architectures with weak memory ordering.
This commit is contained in:
Olivier Houchard 2019-01-18 17:21:32 +01:00 committed by Willy Tarreau
parent 8694978892
commit ff5dd74e25
1 changed files with 5 additions and 0 deletions

View File

@ -32,6 +32,7 @@ static inline struct xref *xref_get_peer_and_lock(struct xref *xref)
/* Get the local pointer to the peer. */
local = HA_ATOMIC_XCHG(&xref->peer, XREF_BUSY);
__ha_barrier_store();
/* If the local pointer is NULL, the peer no longer exists. */
if (local == NULL) {
@ -53,6 +54,7 @@ static inline struct xref *xref_get_peer_and_lock(struct xref *xref)
/* The remote lock is BUSY, We retry the process. */
if (remote == XREF_BUSY) {
xref->peer = local;
__ha_barrier_store();
continue;
}
@ -66,6 +68,8 @@ static inline void xref_unlock(struct xref *xref, struct xref *peer)
/* Release the peer. */
peer->peer = xref;
__ha_barrier_store();
/* Release myself. */
xref->peer = peer;
}
@ -73,6 +77,7 @@ static inline void xref_unlock(struct xref *xref, struct xref *peer)
static inline void xref_disconnect(struct xref *xref, struct xref *peer)
{
peer->peer = NULL;
__ha_barrier_store();
xref->peer = NULL;
}