Patchwork [06/12] migration: use migrate_fd_close in migrate_fd_cleanup

login
register
mail settings
Submitter Paolo Bonzini
Date Nov. 2, 2012, 5:50 p.m.
Message ID <1351878665-32413-7-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/196736/
State New
Headers show

Comments

Paolo Bonzini - Nov. 2, 2012, 5:50 p.m.
migrate_fd_cleanup will usually close the file descriptor via
buffered_file_close's call to migrate_fd_close.  However, in the case
of s->file == NULL it is "inlining" migrate_fd_close (almost: there is a
direct close() instead of using s->close(s)).  To fix the inconsistency
and clean up the code, allow multiple calls to migrate_fd_close and use
the function in migrate_fd_cleanup.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration.c | 19 ++++++++-----------
 1 file modificato, 8 inserzioni(+), 11 rimozioni(-)

Patch

diff --git a/migration.c b/migration.c
index 300ab75..a63596f 100644
--- a/migration.c
+++ b/migration.c
@@ -243,21 +243,13 @@  static int migrate_fd_cleanup(MigrationState *s)
 {
     int ret = 0;
 
-    if (s->fd != -1) {
-        qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
-    }
-
     if (s->file) {
         DPRINTF("closing file\n");
         ret = qemu_fclose(s->file);
         s->file = NULL;
     }
 
-    if (s->fd != -1) {
-        close(s->fd);
-        s->fd = -1;
-    }
-
+    migrate_fd_close(s);
     return ret;
 }
 
@@ -393,8 +385,13 @@  int migrate_fd_wait_for_unfreeze(MigrationState *s)
 
 int migrate_fd_close(MigrationState *s)
 {
-    qemu_set_fd_handler2(s->fd, NULL, NULL, NULL, NULL);
-    return s->close(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;
+    }
+    return rc;
 }
 
 void add_migration_state_change_notifier(Notifier *notify)