diff options
author | Hans de Goede <hdegoede@redhat.com> | 2011-03-24 17:34:29 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2011-03-24 17:34:29 +0100 |
commit | c23141739309d8a59c467cc8bd0df027fa899a5b (patch) | |
tree | 232189547e727461d526aca3403197654d373623 /server/reds.c | |
parent | bcf9a60aa97419e12dc83916719e3633bfbb872f (diff) | |
download | spice-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.c | 2 |
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; } |