Remove spinlocks from GWBUF
The spinlock does not protect from or prevent misuse as buffers must not be used concurrently by multiple threads.
This commit is contained in:
@ -123,16 +123,15 @@ typedef struct
|
||||
*/
|
||||
typedef struct gwbuf
|
||||
{
|
||||
SPINLOCK gwbuf_lock;
|
||||
struct gwbuf *next; /*< Next buffer in a linked chain of buffers */
|
||||
struct gwbuf *tail; /*< Last buffer in a linked chain of buffers */
|
||||
void *start; /*< Start of the valid data */
|
||||
void *end; /*< First byte after the valid data */
|
||||
SHARED_BUF *sbuf; /*< The shared buffer with the real data */
|
||||
uint32_t gwbuf_type; /*< buffer's data type information */
|
||||
HINT *hint; /*< Hint data for this buffer */
|
||||
BUF_PROPERTY *properties; /*< Buffer properties */
|
||||
struct server *server; /*< The target server where the buffer is executed */
|
||||
uint32_t gwbuf_type; /*< buffer's data type information */
|
||||
} GWBUF;
|
||||
|
||||
/*<
|
||||
|
@ -79,7 +79,6 @@ gwbuf_alloc(unsigned int size)
|
||||
sbuf->info = GWBUF_INFO_NONE;
|
||||
sbuf->bufobj = NULL;
|
||||
|
||||
spinlock_init(&rval->gwbuf_lock);
|
||||
rval->start = &sbuf->data;
|
||||
rval->end = (void *)((char *)rval->start + size);
|
||||
rval->sbuf = sbuf;
|
||||
@ -675,20 +674,16 @@ void gwbuf_add_buffer_object(GWBUF* buf,
|
||||
void* data,
|
||||
void (*donefun_fp)(void *))
|
||||
{
|
||||
buffer_object_t** p_b;
|
||||
buffer_object_t* newb;
|
||||
|
||||
CHK_GWBUF(buf);
|
||||
newb = (buffer_object_t *)MXS_MALLOC(sizeof(buffer_object_t));
|
||||
buffer_object_t* newb = (buffer_object_t *)MXS_MALLOC(sizeof(buffer_object_t));
|
||||
MXS_ABORT_IF_NULL(newb);
|
||||
|
||||
newb->bo_id = id;
|
||||
newb->bo_data = data;
|
||||
newb->bo_donefun_fp = donefun_fp;
|
||||
newb->bo_next = NULL;
|
||||
/** Lock */
|
||||
spinlock_acquire(&buf->gwbuf_lock);
|
||||
p_b = &buf->sbuf->bufobj;
|
||||
|
||||
buffer_object_t** p_b = &buf->sbuf->bufobj;
|
||||
/** Search the end of the list and add there */
|
||||
while (*p_b != NULL)
|
||||
{
|
||||
@ -697,30 +692,20 @@ void gwbuf_add_buffer_object(GWBUF* buf,
|
||||
*p_b = newb;
|
||||
/** Set flag */
|
||||
buf->sbuf->info |= GWBUF_INFO_PARSED;
|
||||
/** Unlock */
|
||||
spinlock_release(&buf->gwbuf_lock);
|
||||
}
|
||||
|
||||
void* gwbuf_get_buffer_object_data(GWBUF* buf, bufobj_id_t id)
|
||||
{
|
||||
buffer_object_t* bo;
|
||||
|
||||
CHK_GWBUF(buf);
|
||||
/** Lock */
|
||||
spinlock_acquire(&buf->gwbuf_lock);
|
||||
bo = buf->sbuf->bufobj;
|
||||
|
||||
buffer_object_t* bo = buf->sbuf->bufobj;
|
||||
|
||||
while (bo != NULL && bo->bo_id != id)
|
||||
{
|
||||
bo = bo->bo_next;
|
||||
}
|
||||
/** Unlock */
|
||||
spinlock_release(&buf->gwbuf_lock);
|
||||
if (bo)
|
||||
{
|
||||
return bo->bo_data;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
return bo ? bo->bo_data : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -754,30 +739,23 @@ gwbuf_add_property(GWBUF *buf, const char *name, const char *value)
|
||||
|
||||
prop->name = my_name;
|
||||
prop->value = my_value;
|
||||
spinlock_acquire(&buf->gwbuf_lock);
|
||||
prop->next = buf->properties;
|
||||
buf->properties = prop;
|
||||
spinlock_release(&buf->gwbuf_lock);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *
|
||||
gwbuf_get_property(GWBUF *buf, const char *name)
|
||||
{
|
||||
BUF_PROPERTY *prop;
|
||||
BUF_PROPERTY* prop = buf->properties;
|
||||
|
||||
spinlock_acquire(&buf->gwbuf_lock);
|
||||
prop = buf->properties;
|
||||
while (prop && strcmp(prop->name, name) != 0)
|
||||
{
|
||||
prop = prop->next;
|
||||
}
|
||||
spinlock_release(&buf->gwbuf_lock);
|
||||
if (prop)
|
||||
{
|
||||
return prop->value;
|
||||
}
|
||||
return NULL;
|
||||
|
||||
return prop ? prop->value : NULL;
|
||||
}
|
||||
|
||||
GWBUF *
|
||||
|
Reference in New Issue
Block a user