migration: xxx_close will only be called once

No need to test s->fd again, it is tested in the caller.

Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2012-09-27 13:30:15 +02:00
parent 09bac73c13
commit 6c3601361f
4 changed files with 25 additions and 36 deletions

View file

@ -48,14 +48,12 @@ static int exec_close(MigrationState *s)
{ {
int ret = 0; int ret = 0;
DPRINTF("exec_close\n"); DPRINTF("exec_close\n");
if (s->opaque) { ret = qemu_fclose(s->opaque);
ret = qemu_fclose(s->opaque); s->opaque = NULL;
s->opaque = NULL; s->fd = -1;
s->fd = -1; if (ret >= 0 && !(WIFEXITED(ret) && WEXITSTATUS(ret) == 0)) {
if (ret >= 0 && !(WIFEXITED(ret) && WEXITSTATUS(ret) == 0)) { /* close succeeded, but non-zero exit code: */
/* close succeeded, but non-zero exit code: */ ret = -EIO; /* fake errno value */
ret = -EIO; /* fake errno value */
}
} }
return ret; return ret;
} }

View file

@ -48,29 +48,26 @@ static int fd_close(MigrationState *s)
int ret; int ret;
DPRINTF("fd_close\n"); DPRINTF("fd_close\n");
if (s->fd != -1) { ret = fstat(s->fd, &st);
ret = fstat(s->fd, &st); if (ret == 0 && S_ISREG(st.st_mode)) {
if (ret == 0 && S_ISREG(st.st_mode)) { /*
/* * If the file handle is a regular file make sure the
* If the file handle is a regular file make sure the * data is flushed to disk before signaling success.
* data is flushed to disk before signaling success. */
*/ ret = fsync(s->fd);
ret = fsync(s->fd);
if (ret != 0) {
ret = -errno;
perror("migration-fd: fsync");
return ret;
}
}
ret = close(s->fd);
s->fd = -1;
if (ret != 0) { if (ret != 0) {
ret = -errno; ret = -errno;
perror("migration-fd: close"); perror("migration-fd: fsync");
return ret; return ret;
} }
} }
return 0; ret = close(s->fd);
s->fd = -1;
if (ret != 0) {
ret = -errno;
perror("migration-fd: close");
}
return ret;
} }
void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp) void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp)

View file

@ -44,11 +44,8 @@ static int tcp_close(MigrationState *s)
{ {
int r = 0; int r = 0;
DPRINTF("tcp_close\n"); DPRINTF("tcp_close\n");
if (s->fd != -1) { if (closesocket(s->fd) < 0) {
if (closesocket(s->fd) < 0) { r = -socket_error();
r = -errno;
}
s->fd = -1;
} }
return r; return r;
} }

View file

@ -44,11 +44,8 @@ static int unix_close(MigrationState *s)
{ {
int r = 0; int r = 0;
DPRINTF("unix_close\n"); DPRINTF("unix_close\n");
if (s->fd != -1) { if (close(s->fd) < 0) {
if (close(s->fd) < 0) { r = -errno;
r = -errno;
}
s->fd = -1;
} }
return r; return r;
} }