MEDIUM: backend: Use the new _HA_ATOMIC_* macros.
Use the new _HA_ATOMIC_* macros and add barriers where needed.
diff --git a/src/backend.c b/src/backend.c
index dfdb9b5..5e82bf4 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -813,8 +813,8 @@
goto out;
}
else if (srv != prev_srv) {
- HA_ATOMIC_ADD(&s->be->be_counters.cum_lbconn, 1);
- HA_ATOMIC_ADD(&srv->counters.cum_lbconn, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.cum_lbconn, 1);
+ _HA_ATOMIC_ADD(&srv->counters.cum_lbconn, 1);
}
s->target = &srv->obj_type;
}
@@ -994,11 +994,11 @@
s->txn->flags |= TX_CK_DOWN;
}
s->flags |= SF_REDISP;
- HA_ATOMIC_ADD(&prev_srv->counters.redispatches, 1);
- HA_ATOMIC_ADD(&s->be->be_counters.redispatches, 1);
+ _HA_ATOMIC_ADD(&prev_srv->counters.redispatches, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.redispatches, 1);
} else {
- HA_ATOMIC_ADD(&prev_srv->counters.retries, 1);
- HA_ATOMIC_ADD(&s->be->be_counters.retries, 1);
+ _HA_ATOMIC_ADD(&prev_srv->counters.retries, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.retries, 1);
}
}
}
@@ -1343,7 +1343,8 @@
*/
if (reuse && reuse_orphan) {
srv_conn->idle_time = 0;
- HA_ATOMIC_SUB(&srv->curr_idle_conns, 1);
+ _HA_ATOMIC_SUB(&srv->curr_idle_conns, 1);
+ __ha_barrier_atomic_store();
srv->curr_idle_thr[tid]--;
LIST_ADDQ(&srv->idle_conns[tid], &srv_conn->list);
} else if (reuse) {
@@ -1514,13 +1515,13 @@
s->si[1].flags |= SI_FL_NOLINGER;
if (s->flags & SF_SRV_REUSED) {
- HA_ATOMIC_ADD(&s->be->be_counters.reuse, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.reuse, 1);
if (srv)
- HA_ATOMIC_ADD(&srv->counters.reuse, 1);
+ _HA_ATOMIC_ADD(&srv->counters.reuse, 1);
} else {
- HA_ATOMIC_ADD(&s->be->be_counters.connect, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.connect, 1);
if (srv)
- HA_ATOMIC_ADD(&srv->counters.connect, 1);
+ _HA_ATOMIC_ADD(&srv->counters.connect, 1);
}
err = si_connect(&s->si[1], srv_conn);
@@ -1565,7 +1566,7 @@
int count;
s->flags |= SF_CURR_SESS;
- count = HA_ATOMIC_ADD(&srv->cur_sess, 1);
+ count = _HA_ATOMIC_ADD(&srv->cur_sess, 1);
HA_ATOMIC_UPDATE_MAX(&srv->counters.cur_sess_max, count);
if (s->be->lbprm.server_take_conn)
s->be->lbprm.server_take_conn(srv);
@@ -1658,8 +1659,8 @@
s->si[1].err_type = SI_ET_QUEUE_ERR;
}
- HA_ATOMIC_ADD(&srv->counters.failed_conns, 1);
- HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
+ _HA_ATOMIC_ADD(&srv->counters.failed_conns, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
return 1;
case SRV_STATUS_NOSRV:
@@ -1668,7 +1669,7 @@
s->si[1].err_type = SI_ET_CONN_ERR;
}
- HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
return 1;
case SRV_STATUS_QUEUED:
@@ -1688,8 +1689,8 @@
if (srv)
srv_set_sess_last(srv);
if (srv)
- HA_ATOMIC_ADD(&srv->counters.failed_conns, 1);
- HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
+ _HA_ATOMIC_ADD(&srv->counters.failed_conns, 1);
+ _HA_ATOMIC_ADD(&s->be->be_counters.failed_conns, 1);
/* release other streams waiting for this server */
if (may_dequeue_tasks(srv, s->be))
@@ -1708,7 +1709,7 @@
void set_backend_down(struct proxy *be)
{
be->last_change = now.tv_sec;
- HA_ATOMIC_ADD(&be->down_trans, 1);
+ _HA_ATOMIC_ADD(&be->down_trans, 1);
if (!(global.mode & MODE_STARTING)) {
ha_alert("%s '%s' has no server available!\n", proxy_type_str(be), be->id);