BUG/MINOR: activity: fix Delta_calls and Delta_bytes count

Thanks to the commit 5714aff4a6bf
"DEBUG: pool: store the memprof bin on alloc() and update it on free()", the
amount of memory allocations and memory "frees" is shown now on the same line,
corresponded to the caller name. This is very convenient to debug memory leaks
(haproxy should run with -dMcaller option).

The implicit drawback of this solution is that we count twice same free_calls
and same free_tot (bytes) values in cli_io_handler_show_profiling(), when
we've calculed tot_free_calls and tot_free_bytes, by adding them to the these
totalizators for p_alloc, malloc and calloc allocator types. See the details
about why this happens in a such way in __pool_free() implementation and
also in the commit message for 5714aff4a6bf.

This double addition of free counters falses 'Delta_calls' and 'Delta_bytes',
sometimes we even noticed that they show negative values.

Same problem was with the calculation of average allocated buffer size for
lines, where we show simultaneously the number of allocated and freed bytes.

(cherry picked from commit d5e43caaf541fa3d26f33fc399cf4d5b02e19282)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
(cherry picked from commit 3d392d20222d84baacb1ebf323557c7ebe4285f5)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
(cherry picked from commit d6c9af97330a6962e1f48f3bce041abf95636922)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
(cherry picked from commit 5965eed26671ee692f02127a904c9fde4d3c12b4)
Signed-off-by: Amaury Denoyelle <adenoyelle@haproxy.com>
diff --git a/src/activity.c b/src/activity.c
index d0c3747..b409f3c 100644
--- a/src/activity.c
+++ b/src/activity.c
@@ -679,8 +679,14 @@
 		else
 			chunk_appendf(&trash, "[other]");
 
-		chunk_appendf(&trash," %s(%lld)", memprof_methods[entry->method],
-			      (long long)(entry->alloc_tot - entry->free_tot) / (long long)(entry->alloc_calls + entry->free_calls));
+		if ((tmp_memstats[i].method != MEMPROF_METH_P_ALLOC) &&
+		    (tmp_memstats[i].method != MEMPROF_METH_MALLOC) &&
+		    (tmp_memstats[i].method != MEMPROF_METH_CALLOC)) {
+			chunk_appendf(&trash," %s(%lld)", memprof_methods[entry->method],
+				(long long)(entry->alloc_tot - entry->free_tot) / (long long)(entry->alloc_calls + entry->free_calls));
+		} else
+			chunk_appendf(&trash," %s(%lld)", memprof_methods[entry->method],
+				(long long)(entry->alloc_tot) / (long long)(entry->alloc_calls));
 
 		if (entry->alloc_tot && entry->free_tot) {
 			/* that's a realloc, show the total diff to help spot leaks */
@@ -703,9 +709,13 @@
 	tot_alloc_calls = tot_free_calls = tot_alloc_bytes = tot_free_bytes = 0;
 	for (i = 0; i < max_lines; i++) {
 		tot_alloc_calls += tmp_memstats[i].alloc_calls;
-		tot_free_calls  += tmp_memstats[i].free_calls;
 		tot_alloc_bytes += tmp_memstats[i].alloc_tot;
-		tot_free_bytes  += tmp_memstats[i].free_tot;
+		if ((tmp_memstats[i].method != MEMPROF_METH_P_ALLOC) &&
+		    (tmp_memstats[i].method != MEMPROF_METH_MALLOC) &&
+		    (tmp_memstats[i].method != MEMPROF_METH_CALLOC)) {
+			tot_free_calls  += tmp_memstats[i].free_calls;
+			tot_free_bytes  += tmp_memstats[i].free_tot;
+		}
 	}
 
 	chunk_appendf(&trash,