dispatch_vdi_port_data, was calling vdi_read_buf_release when no client
is connected to free the passed in buf. The only difference between
vdi_read_buf_release and directly adding the buffer back to the ring
with ring_add, is that vdi_read_buf_release calls read_from_vdi_port
after adding the buffer back. But dispatch_vdi_port_data only gets called
from read_from_vdi_port itself, thus this would lead to recursing into
read_from_vdi_port. read_from_vdi_port is protected against recursion and
will immediately return if called recursively. Thus calling
vdi_read_buf_release from dispatch_vdi_port_data is pointless, instead
simply putting the buffer back in the ring suffices.
---
server/reds.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/server/reds.c b/server/reds.c
index b4c4396..288174e 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -833,7 +833,7 @@ static void dispatch_vdi_port_data(int port, VDIReadBuf
*buf)
vdi_read_buf_release, buf);
} else {
red_printf("throwing away, no client: %d", buf->len);
- vdi_read_buf_release(buf->data, buf);
+ ring_add(&state->read_bufs, &buf->link);
}
break;
}
--
1.7.3.2
_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel