mirror of
https://git.proxmox.com/git/qemu
synced 2025-06-14 21:59:32 +00:00
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;
|
char *subtype;
|
||||||
bool active;
|
bool active;
|
||||||
bool blocked;
|
bool blocked;
|
||||||
uint8_t *buffer;
|
const uint8_t *datapos;
|
||||||
uint8_t *datapos;
|
int datalen;
|
||||||
ssize_t bufsize, datalen;
|
|
||||||
QLIST_ENTRY(SpiceCharDriver) next;
|
QLIST_ENTRY(SpiceCharDriver) next;
|
||||||
} SpiceCharDriver;
|
} SpiceCharDriver;
|
||||||
|
|
||||||
@ -186,12 +185,7 @@ static int spice_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
|||||||
int read_bytes;
|
int read_bytes;
|
||||||
|
|
||||||
assert(s->datalen == 0);
|
assert(s->datalen == 0);
|
||||||
if (s->bufsize < len) {
|
s->datapos = buf;
|
||||||
s->bufsize = len;
|
|
||||||
s->buffer = g_realloc(s->buffer, s->bufsize);
|
|
||||||
}
|
|
||||||
memcpy(s->buffer, buf, len);
|
|
||||||
s->datapos = s->buffer;
|
|
||||||
s->datalen = len;
|
s->datalen = len;
|
||||||
spice_server_char_device_wakeup(&s->sin);
|
spice_server_char_device_wakeup(&s->sin);
|
||||||
read_bytes = len - s->datalen;
|
read_bytes = len - s->datalen;
|
||||||
|
Loading…
Reference in New Issue
Block a user