summaryrefslogtreecommitdiffstats
path: root/server/reds.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2011-03-24 17:34:29 +0100
committerHans de Goede <hdegoede@redhat.com>2011-03-24 17:34:29 +0100
commitc23141739309d8a59c467cc8bd0df027fa899a5b (patch)
tree232189547e727461d526aca3403197654d373623 /server/reds.c
parentbcf9a60aa97419e12dc83916719e3633bfbb872f (diff)
downloadspice-c23141739309d8a59c467cc8bd0df027fa899a5b.tar.gz
spice-c23141739309d8a59c467cc8bd0df027fa899a5b.tar.xz
spice-c23141739309d8a59c467cc8bd0df027fa899a5b.zip
server: avoid unneeded recursion in dispatch_vdi_port_data
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.
Diffstat (limited to 'server/reds.c')
-rw-r--r--server/reds.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/server/reds.c b/server/reds.c
index b4c43963..288174e1 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;
}