mirror of https://github.com/xemu-project/xemu.git
migration: make writes blocking
Move all the writes to the migration_thread, and make writings blocking. Notice that are still using the iothread for everything that we do. Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
766bd1769e
commit
dd217b8732
|
@ -113,11 +113,6 @@ int64_t qemu_file_set_rate_limit(QEMUFile *f, int64_t new_rate);
|
|||
int64_t qemu_file_get_rate_limit(QEMUFile *f);
|
||||
int qemu_file_get_error(QEMUFile *f);
|
||||
|
||||
/* Try to send any outstanding data. This function is useful when output is
|
||||
* halted due to rate limiting or EAGAIN errors occur as it can be used to
|
||||
* resume output. */
|
||||
int qemu_file_put_notify(QEMUFile *f);
|
||||
|
||||
static inline void qemu_put_be64s(QEMUFile *f, const uint64_t *pv)
|
||||
{
|
||||
qemu_put_be64(f, *pv);
|
||||
|
|
|
@ -69,7 +69,6 @@ void exec_start_outgoing_migration(MigrationState *s, const char *command, Error
|
|||
|
||||
s->fd = fileno(f);
|
||||
assert(s->fd != -1);
|
||||
socket_set_nonblock(s->fd);
|
||||
|
||||
s->opaque = qemu_popen(f, "w");
|
||||
|
||||
|
|
|
@ -75,7 +75,6 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
|
|||
return;
|
||||
}
|
||||
|
||||
fcntl(s->fd, F_SETFL, O_NONBLOCK);
|
||||
s->get_error = fd_errno;
|
||||
s->write = fd_write;
|
||||
s->close = fd_close;
|
||||
|
|
|
@ -60,6 +60,7 @@ static void tcp_wait_for_connect(int fd, void *opaque)
|
|||
} else {
|
||||
DPRINTF("migrate connect success\n");
|
||||
s->fd = fd;
|
||||
socket_set_block(s->fd);
|
||||
migrate_fd_connect(s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ static void unix_wait_for_connect(int fd, void *opaque)
|
|||
} else {
|
||||
DPRINTF("migrate connect success\n");
|
||||
s->fd = fd;
|
||||
socket_set_block(s->fd);
|
||||
migrate_fd_connect(s);
|
||||
}
|
||||
}
|
||||
|
|
17
migration.c
17
migration.c
|
@ -297,18 +297,6 @@ static void migrate_fd_completed(MigrationState *s)
|
|||
notifier_list_notify(&migration_state_notifiers, s);
|
||||
}
|
||||
|
||||
static void migrate_fd_put_notify(void *opaque)
|
||||
{
|
||||
MigrationState *s = opaque;
|
||||
int ret;
|
||||
|
||||
qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
|
||||
ret = qemu_file_put_notify(s->file);
|
||||
if (ret) {
|
||||
migrate_fd_error(s);
|
||||
}
|
||||
}
|
||||
|
||||
ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
|
||||
size_t size)
|
||||
{
|
||||
|
@ -325,10 +313,6 @@ ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
|
|||
if (ret == -1)
|
||||
ret = -(s->get_error(s));
|
||||
|
||||
if (ret == -EAGAIN) {
|
||||
qemu_set_fd_handler2(s->fd, NULL, NULL, migrate_fd_put_notify, s);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -425,7 +409,6 @@ int migrate_fd_close(MigrationState *s)
|
|||
{
|
||||
int rc = 0;
|
||||
if (s->fd != -1) {
|
||||
qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
|
||||
rc = s->close(s);
|
||||
s->fd = -1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue