diff options
author | Alon Levy <alevy@redhat.com> | 2013-04-05 11:30:23 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2013-04-16 11:52:09 +0200 |
commit | b010cec86b9a4a0b63162cd27e37c2d99e90ed66 (patch) | |
tree | 107d19633a0368fc7ce1f10d48a4ec2ec4d7ad4b | |
parent | ae893e5e818878caf433d716d37be9df297403fe (diff) |
spice-qemu-char: Remove intermediate buffer
virtio-serial's buffer is valid when it calls us, and we don't
access it otherwise: vmc_read is only called in response to wakeup,
or else we set datalen=0 and throttle. Then vmc_read is called back,
we return 0 (not accessing the buffer) and set the timer to unthrottle.
Also make datalen int and not ssize_t (to fit spice_chr_write signature).
HdG: Update to apply to spice-qemu-char with new gio-channel based
flowcontrol support.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | spice-qemu-char.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/spice-qemu-char.c b/spice-qemu-char.c index 7e551bf46e..ff95fcbe01 100644 --- a/spice-qemu-char.c +++ b/spice-qemu-char.c @@ -14,9 +14,8 @@ typedef struct SpiceCharDriver { char *subtype; bool active; bool blocked; - uint8_t *buffer; - uint8_t *datapos; - ssize_t bufsize, datalen; + const uint8_t *datapos; + int datalen; QLIST_ENTRY(SpiceCharDriver) next; } SpiceCharDriver; @@ -186,12 +185,7 @@ static int spice_chr_write(CharDriverState *chr, const uint8_t *buf, int len) int read_bytes; assert(s->datalen == 0); - if (s->bufsize < len) { - s->bufsize = len; - s->buffer = g_realloc(s->buffer, s->bufsize); - } - memcpy(s->buffer, buf, len); - s->datapos = s->buffer; + s->datapos = buf; s->datalen = len; spice_server_char_device_wakeup(&s->sin); read_bytes = len - s->datalen; |