BUG/MINOR: server: do not use refcount in free_server in stopping mode

Currently there is a leak at process shutdown with dynamic servers with
check/agent-check activated. Check purges are not executed on process
stopping, so the server is not liberated due to its refcount.

The solution is simply to ignore the refcount on process stopping mode
and free the server on the first free_server invocation.

This should not be backported, unless dynamic server checks are
backported. In this case, the following commit must be backported first.
  7afa5c1843521ec3be7549592d2b38ccc9d68b73
  MINOR: global: define MODE_STOPPING

(cherry picked from commit 13f2e2ceebf7b97baf5e035f821470ec7a360980)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
diff --git a/src/server.c b/src/server.c
index b9f3915..f2bd853 100644
--- a/src/server.c
+++ b/src/server.c
@@ -2217,16 +2217,20 @@
 	return HA_ATOMIC_SUB_FETCH(&srv->refcount_dynsrv, 1);
 }
 
-/* Deallocate a server <srv> and its member. <srv> must be allocated.
+/* Deallocate a server <srv> and its member. <srv> must be allocated. For
+ * dynamic servers, its refcount is decremented first. The free operations are
+ * conducted only if the refcount is nul, unless the process is stopping.
  */
 void free_server(struct server *srv)
 {
 	/* For dynamic servers, decrement the reference counter. Only free the
 	 * server when reaching zero.
 	 */
-	if (srv->flags & SRV_F_DYNAMIC) {
-		if (srv_release_dynsrv(srv))
-			return;
+	if (likely(!(global.mode & MODE_STOPPING))) {
+		if (srv->flags & SRV_F_DYNAMIC) {
+			if (srv_release_dynsrv(srv))
+				return;
+		}
 	}
 
 	task_destroy(srv->warmup);