mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
libxl_qmp: Handle unexpected end-of-socket
When read() return 0, the current code just tries again. But this leads to an infinite loop if QEMU died too soon. Also, retry select if a signal was caught. Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
636171218e
commit
abc94ef0f2
1 file changed
+4
-1
@@ -390,13 +390,16 @@ static int qmp_next(libxl__gc *gc, libxl__qmp_handler *qmp)
|
||||
LIBXL__LOG(qmp->ctx, LIBXL__LOG_ERROR, "timeout");
|
||||
return -1;
|
||||
} else if (ret < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
LIBXL__LOG_ERRNO(qmp->ctx, LIBXL__LOG_ERROR, "Select error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rd = read(qmp->qmp_fd, qmp->buffer, QMP_RECEIVE_BUFFER_SIZE);
|
||||
if (rd == 0) {
|
||||
continue;
|
||||
LIBXL__LOG(qmp->ctx, LIBXL__LOG_ERROR, "Unexpected end of socket");
|
||||
return -1;
|
||||
} else if (rd < 0) {
|
||||
LIBXL__LOG_ERRNO(qmp->ctx, LIBXL__LOG_ERROR, "Socket read error");
|
||||
return rd;
|
||||
|
||||