From 4cf5b3293f02f8bb44d49422d8f18b95710d266c Mon Sep 17 00:00:00 2001 From: vraatikka Date: Tue, 17 Sep 2013 15:10:16 +0300 Subject: [PATCH] Added check routine for gw_buffer. Only effective in debug build. --- server/core/buffer.c | 16 +++++++++------- utils/skygw_debug.h | 7 ++++++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/server/core/buffer.c b/server/core/buffer.c index 09b165ddd..505f3e039 100644 --- a/server/core/buffer.c +++ b/server/core/buffer.c @@ -37,7 +37,7 @@ #include #include #include - +#include /** * Allocate a new gateway buffer structure of size bytes. @@ -82,7 +82,7 @@ SHARED_BUF *sbuf; rval->sbuf = sbuf; rval->next = NULL; rval->command = 0; - + CHK_GWBUF(rval); return rval; } @@ -95,9 +95,10 @@ void gwbuf_free(GWBUF *buf) { atomic_add(&buf->sbuf->refcount, -1); + CHK_GWBUF(buf); if (buf->sbuf->refcount == 0) { - free(buf->sbuf->data); + free(buf->sbuf->data); free(buf->sbuf); } free(buf); @@ -129,7 +130,7 @@ GWBUF *rval; rval->end = buf->end; rval->next = NULL; rval->command = buf->command; - + CHK_GWBUF(rval); return rval; } /** @@ -146,9 +147,10 @@ GWBUF * gwbuf_append(GWBUF *head, GWBUF *tail) { GWBUF *ptr = head; - + if (!head) return tail; + CHK_GWBUF(head); while (ptr->next) { ptr = ptr->next; @@ -177,7 +179,7 @@ GWBUF * gwbuf_consume(GWBUF *head, unsigned int length) { GWBUF *rval = head; - + CHK_GWBUF(head); GWBUF_CONSUME(head, length); if (GWBUF_EMPTY(head)) { @@ -197,7 +199,7 @@ unsigned int gwbuf_length(GWBUF *head) { int rval = 0; - + CHK_GWBUF(head); while (head) { rval += GWBUF_LENGTH(head); diff --git a/utils/skygw_debug.h b/utils/skygw_debug.h index 9dd218bbb..9d8ed6909 100644 --- a/utils/skygw_debug.h +++ b/utils/skygw_debug.h @@ -16,7 +16,7 @@ * Copyright SkySQL Ab 2013 */ - +#include #include #define __USE_UNIX98 1 @@ -360,6 +360,11 @@ typedef enum skygw_chk_t { "Session under- or overflow"); \ } +#define CHK_GWBUF(b) { \ + ss_info_dassert(((b)->start <= (b)->end), \ + "gwbuf start has passed the endpoint"); \ + } + #if defined(SS_DEBUG) bool conn_open[1024]; #endif