From 95a4daecc974ad1c60e2103d47093d5bb55e877c Mon Sep 17 00:00:00 2001 From: counterpoint Date: Tue, 22 Sep 2015 11:54:47 +0100 Subject: [PATCH] Add GWBUF_POINTER_IN_BUFFER macro; add extra free calls to remove memory leaks. --- server/include/buffer.h | 3 +++ server/modules/protocol/mysql_backend.c | 1 + server/modules/protocol/mysql_client.c | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/server/include/buffer.h b/server/include/buffer.h index c0555bae4..6be9fc7aa 100644 --- a/server/include/buffer.h +++ b/server/include/buffer.h @@ -168,6 +168,9 @@ typedef struct gwbuf { /*< Consume a number of bytes in the buffer */ #define GWBUF_CONSUME(b, bytes) ((b)->start = bytes > ((char *)(b)->end - (char *)(b)->start) ? (b)->end : (void *)((char *)(b)->start + (bytes))); +/*< Check if a given pointer is within the buffer */ +#define GWBUF_POINTER_IN_BUFFER (ptr, b) ((char *)(ptr) >= (char *)(b)->start && (char *)(ptr) < (char *)(b)->end) + /*< Consume a complete buffer */ #define GWBUF_CONSUME_ALL(b) gwbuf_consume((b), GWBUF_LENGTH((b))) diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index 28c2d2a43..fe23c9778 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -406,6 +406,7 @@ static int gw_read_backend_event(DCB *dcb) { } else { + gwbuf_free(errbuf); dcb->dcb_errhandle_called = true; dcb_close(dcb); rc = 1; diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index edda2b888..861b20da0 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -817,6 +817,10 @@ int gw_read_client_event( "Session will be closed."))); } rc = 1; + while (read_buffer) + { + read_buffer = gwbuf_consume(read_buffer, GWBUF_LENGTH(read_buffer)); + } goto return_rc; } } @@ -828,6 +832,10 @@ int gw_read_client_event( 2, 0, "failed to create new session"); + while (read_buffer) + { + read_buffer = gwbuf_consume(read_buffer, GWBUF_LENGTH(read_buffer)); + } return 0; } } @@ -1204,6 +1212,10 @@ int gw_read_client_event( "Session will be closed."))); } + while (read_buffer) + { + read_buffer = gwbuf_consume(read_buffer, GWBUF_LENGTH(read_buffer)); + } } } }