From b67310827698ebed602aac864f4a822472f3b61f Mon Sep 17 00:00:00 2001 From: VilhoRaatikka Date: Wed, 12 Feb 2014 18:55:44 +0200 Subject: [PATCH] Bug # 403 http://bugs.skysql.com/show_bug.cgi?id=403 Comparing the return value of atomic_add instead of buffer's reference count variable. --- server/core/buffer.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/server/core/buffer.c b/server/core/buffer.c index 28abcb96c..d46ad475e 100644 --- a/server/core/buffer.c +++ b/server/core/buffer.c @@ -94,12 +94,11 @@ SHARED_BUF *sbuf; void gwbuf_free(GWBUF *buf) { - atomic_add(&buf->sbuf->refcount, -1); - CHK_GWBUF(buf); - if (buf->sbuf->refcount == 0) + CHK_GWBUF(buf); + if (atomic_add(&buf->sbuf->refcount, -1) == 1) { free(buf->sbuf->data); - free(buf->sbuf); + free(buf->sbuf); } free(buf); }