MXS-1740 Hintfilter leaks memory

Single spot where an existing hint ptr was overwritten. Removed gwbuf_add_hint()
because it was  adding hints at the opposite end compared to functions in hint.h.
Added hint_splice() to replace.
This commit is contained in:
Niclas Antti
2018-05-30 09:45:17 +03:00
parent 8917458505
commit 89296ed4e4
6 changed files with 32 additions and 37 deletions

View File

@ -814,28 +814,6 @@ gwbuf_make_contiguous(GWBUF *orig)
return newbuf;
}
void
gwbuf_add_hint(GWBUF *buf, HINT *hint)
{
HINT *ptr;
spinlock_acquire(&buf->gwbuf_lock);
if (buf->hint)
{
ptr = buf->hint;
while (ptr->next)
{
ptr = ptr->next;
}
ptr->next = hint;
}
else
{
buf->hint = hint;
}
spinlock_release(&buf->gwbuf_lock);
}
size_t gwbuf_copy_data(const GWBUF *buffer, size_t offset, size_t bytes, uint8_t* dest)
{
uint32_t buflen;

View File

@ -113,6 +113,32 @@ hint_create_route(HINT *head, HINT_TYPE type, const char *data)
return hint;
}
/**
* Insert a hint list before head.
*
* @param head Element before which contents is inserted.
* May be NULL, in which case the result is list.
* @param list Hint list to prepend
* @return Head of list
*/
HINT *
hint_splice(HINT *head, HINT *list)
{
ss_dassert(list);
if (head)
{
HINT* tail = list;
while (tail->next)
{
tail = tail->next;
}
tail->next = head;
}
return list;
}
/**
* Create name/value parameter hint
*

View File

@ -467,10 +467,6 @@ test1()
ss_info_dassert(size == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_info_dassert(GWBUF_IS_TYPE_UNDEFINED(buffer), "Buffer type should be undefined");
ss_dfprintf(stderr, "\t..done\nSet a hint for the buffer");
hint = hint_create_parameter(NULL, (char*)"name", (char*)"value");
gwbuf_add_hint(buffer, hint);
ss_info_dassert(hint == buffer->hint, "Buffer should point to first and only hint");
ss_dfprintf(stderr, "\t..done\nSet a property for the buffer");
gwbuf_add_property(buffer, (char*)"name", (char*)"value");
ss_info_dassert(0 == strcmp("value", gwbuf_get_property(buffer, (char*)"name")),