BUG/MINOR: spoe: check buffer size before acquiring or releasing it

In spoe_acquire_buffer and spoe_release_buffer, instead of checking the buffer
against buf_empty, we now check its size. It is important because when an
allocation fails, it will be set to buf_wanted. In both cases, the size is 0.

It is a proactive bug fix, no real problem was observed till now. It cannot be
backported as is in 1.7 because of all changes made on the SPOE in 1.8.
This commit is contained in:
Christopher Faulet 2017-11-10 11:54:58 +01:00 committed by Willy Tarreau
parent 3e5e417060
commit 600d37edda

View File

@ -2695,7 +2695,7 @@ spoe_process_event(struct stream *s, struct spoe_context *ctx,
static int
spoe_acquire_buffer(struct buffer **buf, struct buffer_wait *buffer_wait)
{
if (*buf != &buf_empty)
if ((*buf)->size)
return 1;
if (!LIST_ISEMPTY(&buffer_wait->list)) {
@ -2725,7 +2725,7 @@ spoe_release_buffer(struct buffer **buf, struct buffer_wait *buffer_wait)
}
/* Release the buffer if needed */
if (*buf != &buf_empty) {
if ((*buf)->size) {
b_free(buf);
offer_buffers(buffer_wait->target,
tasks_run_queue + applets_active_queue);