Remove atomic operations from buffers

As buffers are meant to be used only within a particular session, the
atomic operations are no longer necessary and can thus be removed. This
removes the extra overhead that the atomic operations add.
This commit is contained in:
Markus Mäkelä 2018-10-02 23:24:19 +03:00
parent a645467827
commit b33b888b07
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19

View File

@ -18,7 +18,6 @@
#include <sstream>
#include <maxbase/assert.h>
#include <maxbase/atomic.hh>
#include <maxscale/alloc.h>
#include <maxscale/hint.h>
#include <maxscale/log.h>
@ -118,7 +117,9 @@ void gwbuf_free(GWBUF* buf)
*/
static void gwbuf_free_one(GWBUF* buf)
{
if (mxb::atomic::add(&buf->sbuf->refcount, -1) == 1)
--buf->sbuf->refcount;
if (buf->sbuf->refcount == 0)
{
buffer_object_t* bo = buf->sbuf->bufobj;
@ -169,7 +170,7 @@ static GWBUF* gwbuf_clone_one(GWBUF* buf)
}
mxb_assert(buf->owner == RoutingWorker::get_current_id());
mxb::atomic::add(&buf->sbuf->refcount, 1);
++buf->sbuf->refcount;
#ifdef SS_DEBUG
rval->owner = RoutingWorker::get_current_id();
#endif
@ -256,7 +257,7 @@ static GWBUF* gwbuf_clone_portion(GWBUF* buf,
return NULL;
}
mxb::atomic::add(&buf->sbuf->refcount, 1);
++buf->sbuf->refcount;
#ifdef SS_DEBUG
clonebuf->owner = RoutingWorker::get_current_id();
#endif