MINOR: buffers: Move swap_buffer into buffer.c and add deinit_buffer function

swap_buffer is a global variable only used by buffer_slow_realign. So it has
been moved from global.h to buffer.c and it is allocated by init_buffer
function. deinit_buffer function has been added to release it. It is also used
to destroy the buffers' pool.
diff --git a/include/common/buffer.h b/include/common/buffer.h
index f8bd26e..f1edae0 100644
--- a/include/common/buffer.h
+++ b/include/common/buffer.h
@@ -53,6 +53,7 @@
 extern struct list buffer_wq;
 
 int init_buffer();
+void deinit_buffer();
 int buffer_replace2(struct buffer *b, char *pos, char *end, const char *str, int len);
 int buffer_insert_line2(struct buffer *b, char *pos, const char *str, int len);
 void buffer_dump(FILE *o, struct buffer *b, int from, int to);
diff --git a/include/types/global.h b/include/types/global.h
index 5084177..0a6ece7 100644
--- a/include/types/global.h
+++ b/include/types/global.h
@@ -172,7 +172,6 @@
 extern int  listeners;
 extern int  jobs;               /* # of active jobs */
 extern struct chunk trash;
-extern char *swap_buffer;
 extern int nb_oldpids;          /* contains the number of old pids found */
 extern const int zero;
 extern const int one;
diff --git a/src/buffer.c b/src/buffer.c
index 3f3a198..7a49ba6 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -34,6 +34,11 @@
 /* list of objects waiting for at least one buffer */
 struct list buffer_wq = LIST_HEAD_INIT(buffer_wq);
 
+/* this buffer is always the same size as standard buffers and is used for
+ * swapping data inside a buffer.
+ */
+static char *swap_buffer = NULL;
+
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */
 int init_buffer()
 {
@@ -59,9 +64,20 @@
 		return 0;
 
 	pool_free2(pool2_buffer, buffer);
+
+	swap_buffer = calloc(1, global.tune.bufsize);
+	if (swap_buffer == NULL)
+		return 0;
+
 	return 1;
 }
 
+void deinit_buffer()
+{
+	free(swap_buffer); swap_buffer = NULL;
+	pool_destroy2(pool2_buffer);
+}
+
 /* This function writes the string <str> at position <pos> which must be in
  * buffer <b>, and moves <end> just after the end of <str>. <b>'s parameters
  * <l> and <r> are updated to be valid after the shift. The shift value
diff --git a/src/haproxy.c b/src/haproxy.c
index 47ef859..75afd97 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -177,11 +177,6 @@
 
 static char *cur_unixsocket = NULL;
 
-/* this buffer is always the same size as standard buffers and is used for
- * swapping data inside a buffer.
- */
-char *swap_buffer = NULL;
-
 int atexit_flag = 0;
 
 int nb_oldpids = 0;
@@ -1723,7 +1718,6 @@
 		exit(1);
 	}
 
-	swap_buffer = calloc(1, global.tune.bufsize);
 	get_http_auth_buff = calloc(1, global.tune.bufsize);
 	static_table_key = calloc(1, sizeof(*static_table_key));
 
@@ -2131,7 +2125,6 @@
 	free(oldpids);        oldpids = NULL;
 	free(static_table_key); static_table_key = NULL;
 	free(get_http_auth_buff); get_http_auth_buff = NULL;
-	free(swap_buffer);    swap_buffer = NULL;
 	free(global_listener_queue_task); global_listener_queue_task = NULL;
 
 	list_for_each_entry_safe(log, logb, &global.logsrvs, list) {
@@ -2153,11 +2146,12 @@
 
 	vars_prune(&global.vars, NULL, NULL);
 
+	deinit_buffer();
+
 	pool_destroy2(pool2_stream);
 	pool_destroy2(pool2_session);
 	pool_destroy2(pool2_connection);
 	pool_destroy2(pool2_trash);
-	pool_destroy2(pool2_buffer);
 	pool_destroy2(pool2_requri);
 	pool_destroy2(pool2_task);
 	pool_destroy2(pool2_capture);