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.
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)) {
}
/* 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);