MEDIUM: threads/proxy: Add a lock per proxy and atomically update proxy vars

Now, each proxy contains a lock that must be used when necessary to protect
it. Moreover, all proxy's counters are now updated using atomic operations.
diff --git a/src/session.c b/src/session.c
index 3753a2c..3f48878 100644
--- a/src/session.c
+++ b/src/session.c
@@ -52,9 +52,8 @@
 		memset(sess->stkctr, 0, sizeof(sess->stkctr));
 		vars_init(&sess->vars, SCOPE_SESS);
 		sess->task = NULL;
-		fe->feconn++;
-		if (fe->feconn > fe->fe_counters.conn_max)
-			fe->fe_counters.conn_max = fe->feconn;
+		HA_ATOMIC_UPDATE_MAX(&fe->fe_counters.conn_max,
+				     HA_ATOMIC_ADD(&fe->feconn, 1));
 		if (li)
 			proxy_inc_fe_conn_ctr(li, fe);
 		HA_ATOMIC_ADD(&totalconn, 1);
@@ -65,7 +64,7 @@
 
 void session_free(struct session *sess)
 {
-	sess->fe->feconn--;
+	HA_ATOMIC_SUB(&sess->fe->feconn, 1);
 	session_store_counters(sess);
 	vars_prune_per_sess(&sess->vars);
 	pool_free2(pool2_session, sess);