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>
This commit is contained in:
parent
ae893e5e81
commit
b010cec86b
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user