qemu-char: (Re-)connect for tcp_chr_write() unconnected writing
tcp_chr_write() did not deal with writing to an unconnected connection and return the original length of the data, it's not right and would cause false writing. So (re-)connect it and return 0 for this situation. Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									be52202902
								
							
						
					
					
						commit
						c3767ed0eb
					
				@ -2141,14 +2141,17 @@ typedef struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void tcp_chr_accept(void *opaque);
 | 
					static void tcp_chr_accept(void *opaque);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void tcp_chr_connect(void *opaque);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
 | 
					static int tcp_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    TCPCharDriver *s = chr->opaque;
 | 
					    TCPCharDriver *s = chr->opaque;
 | 
				
			||||||
    if (s->connected) {
 | 
					    if (s->connected) {
 | 
				
			||||||
        return send_all(s->fd, buf, len);
 | 
					        return send_all(s->fd, buf, len);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        /* XXX: indicate an error ? */
 | 
					        /* (Re-)connect for unconnected writing */
 | 
				
			||||||
        return len;
 | 
					        tcp_chr_connect(chr);
 | 
				
			||||||
 | 
					        return 0;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user