diff --git a/include/common/buffer.h b/include/common/buffer.h index f8bd26efb..f1edae054 100644 --- a/include/common/buffer.h +++ b/include/common/buffer.h @@ -53,6 +53,7 @@ extern struct buffer buf_wanted; 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 5084177b1..0a6ece71f 100644 --- a/include/types/global.h +++ b/include/types/global.h @@ -172,7 +172,6 @@ extern int actconn; /* # of active sessions */ 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 3f3a198ca..7a49ba63d 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -34,6 +34,11 @@ struct buffer buf_wanted = { .p = buf_wanted.data }; /* 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 @@ int init_buffer() 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 at position which must be in * buffer , and moves just after the end of . 's parameters * and are updated to be valid after the shift. The shift value diff --git a/src/haproxy.c b/src/haproxy.c index 47ef859b9..75afd97bd 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -177,11 +177,6 @@ static const char *old_unixsocket; 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 @@ static void init(int argc, char **argv) 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 @@ void deinit(void) 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 @@ void deinit(void) 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);