mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
migration/qemu-file: don't make incoming fds blocking again
In migration we want to pass fd "as is", not changing its blocking status. The only current user of these fds is CPR state (through VMSTATE_FD), which of-course doesn't want to modify fds on target when source is still running and use these fds. Suggested-by: Daniel P. Berrangé <berrange@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
committed by
Daniel P. Berrangé
parent
e5eacba4a3
commit
7bc2cbe330
@@ -464,7 +464,8 @@ static void qio_channel_socket_finalize(Object *obj)
|
||||
|
||||
#ifndef WIN32
|
||||
static void qio_channel_socket_copy_fds(struct msghdr *msg,
|
||||
int **fds, size_t *nfds)
|
||||
int **fds, size_t *nfds,
|
||||
bool preserve_blocking)
|
||||
{
|
||||
struct cmsghdr *cmsg;
|
||||
|
||||
@@ -497,8 +498,10 @@ static void qio_channel_socket_copy_fds(struct msghdr *msg,
|
||||
continue;
|
||||
}
|
||||
|
||||
/* O_NONBLOCK is preserved across SCM_RIGHTS so reset it */
|
||||
qemu_socket_set_block(fd);
|
||||
if (!preserve_blocking) {
|
||||
/* O_NONBLOCK is preserved across SCM_RIGHTS so reset it */
|
||||
qemu_socket_set_block(fd);
|
||||
}
|
||||
|
||||
#ifndef MSG_CMSG_CLOEXEC
|
||||
qemu_set_cloexec(fd);
|
||||
@@ -556,7 +559,9 @@ static ssize_t qio_channel_socket_readv(QIOChannel *ioc,
|
||||
}
|
||||
|
||||
if (fds && nfds) {
|
||||
qio_channel_socket_copy_fds(&msg, fds, nfds);
|
||||
qio_channel_socket_copy_fds(
|
||||
&msg, fds, nfds,
|
||||
flags & QIO_CHANNEL_READ_FLAG_FD_PRESERVE_BLOCKING);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user