Skip to content

Commit

Permalink
migration: merge qemu_popen_cmd with qemu_popen
Browse files Browse the repository at this point in the history
There is no reason for outgoing exec migration to do popen manually
anymore (the reason used to be that we needed the FILE* to make it
non-blocking).  Use qemu_popen_cmd.

Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
  • Loading branch information
bonzini authored and Juan Quintela committed Mar 11, 2013
1 parent a0ff044 commit 817b9ed
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 21 deletions.
1 change: 0 additions & 1 deletion include/migration/qemu-file.h
Expand Up @@ -77,7 +77,6 @@ QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops);
QEMUFile *qemu_fopen(const char *filename, const char *mode);
QEMUFile *qemu_fdopen(int fd, const char *mode);
QEMUFile *qemu_fopen_socket(int fd);
QEMUFile *qemu_popen(FILE *popen_file, const char *mode);
QEMUFile *qemu_popen_cmd(const char *command, const char *mode);
int qemu_get_fd(QEMUFile *f);
int qemu_fclose(QEMUFile *f);
Expand Down
10 changes: 4 additions & 6 deletions migration-exec.c
Expand Up @@ -59,19 +59,17 @@ static int exec_close(MigrationState *s)

void exec_start_outgoing_migration(MigrationState *s, const char *command, Error **errp)
{
FILE *f;

f = popen(command, "w");
QEMUFile *f;
f = qemu_popen_cmd(command, "w");
if (f == NULL) {
error_setg_errno(errp, errno, "failed to popen the migration target");
return;
}

s->fd = fileno(f);
s->opaque = f;
s->fd = qemu_get_fd(f);
assert(s->fd != -1);

s->opaque = qemu_popen(f, "w");

s->close = exec_close;
s->get_error = file_errno;
s->write = file_write;
Expand Down
22 changes: 8 additions & 14 deletions savevm.c
Expand Up @@ -275,11 +275,17 @@ static const QEMUFileOps stdio_pipe_write_ops = {
.close = stdio_pclose
};

QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
{
FILE *stdio_file;
QEMUFileStdio *s;

if (stdio_file == NULL || mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
stdio_file = popen(command, mode);
if (stdio_file == NULL) {
return NULL;
}

if (mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
fprintf(stderr, "qemu_popen: Argument validity check failed\n");
return NULL;
}
Expand All @@ -296,18 +302,6 @@ QEMUFile *qemu_popen(FILE *stdio_file, const char *mode)
return s->file;
}

QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
{
FILE *popen_file;

popen_file = popen(command, mode);
if(popen_file == NULL) {
return NULL;
}

return qemu_popen(popen_file, mode);
}

static const QEMUFileOps stdio_file_read_ops = {
.get_fd = stdio_get_fd,
.get_buffer = stdio_get_buffer,
Expand Down

0 comments on commit 817b9ed

Please sign in to comment.