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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Alon Levy
						Alon Levy