diff --git a/docs/specs/ivshmem-spec.txt b/docs/specs/ivshmem-spec.txt index 0e9185a04b..0cd63adff0 100644 --- a/docs/specs/ivshmem-spec.txt +++ b/docs/specs/ivshmem-spec.txt @@ -187,6 +187,9 @@ Each message consists of a single 8 byte little-endian signed number, and may be accompanied by a file descriptor via SCM_RIGHTS. Both client and server close the connection on error. +Note: QEMU currently doesn't close the connection right on error, but +only when the character device is destroyed. + On connect, the server sends the following messages in order: 1. The protocol version number, currently zero. The client should diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 8356399092..0ac0238c7f 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -708,8 +708,7 @@ static void ivshmem_check_version(void *opaque, const uint8_t * buf, int size) if (tmp != -1 || version != IVSHMEM_PROTOCOL_VERSION) { fprintf(stderr, "incompatible version, you are connecting to a ivshmem-" "server using a different protocol please check your setup\n"); - qemu_chr_delete(s->server_chr); - s->server_chr = NULL; + qemu_chr_add_handlers(s->server_chr, NULL, NULL, NULL, s); return; }