diff --git a/migration.c b/migration.c
index f5959b4..6448d0b 100644
--- a/migration.c
+++ b/migration.c
@@ -319,6 +319,11 @@ ssize_t migrate_fd_put_buffer(void *opaque, const void
*data, size_t size)
FdMigrationState *s = opaque;
ssize_t ret;
+ if (s->state == MIG_STATE_ERROR ||
+ s->state == MIG_STATE_CANCELLED) {
+ return -EIO;
+ }
+
do {
ret = s->write(s, data, size);
} while (ret == -1&& ((s->get_error(s)) == EINTR));
I think I slightly prefer this second option, since it avoids the EBADF
scenario. Other opinions ?