Revision 9499743f

b/buffered_file.c
150 150
        if (ret < 0) {
151 151
            break;
152 152
        }
153
        if (s->freeze_output)
154
            migrate_fd_wait_for_unfreeze(s->migration_state);
153
        if (s->freeze_output) {
154
            ret = migrate_fd_wait_for_unfreeze(s->migration_state);
155
            if (ret < 0) {
156
                break;
157
            }
158
        }
155 159
    }
156 160

  
157 161
    ret2 = migrate_fd_close(s->migration_state);
b/migration.c
370 370
    migrate_fd_cleanup(s);
371 371
}
372 372

  
373
void migrate_fd_wait_for_unfreeze(MigrationState *s)
373
int migrate_fd_wait_for_unfreeze(MigrationState *s)
374 374
{
375 375
    int ret;
376 376

  
377 377
    DPRINTF("wait for unfreeze\n");
378 378
    if (s->state != MIG_STATE_ACTIVE)
379
        return;
379
        return -EINVAL;
380 380

  
381 381
    do {
382 382
        fd_set wfds;
......
388 388
    } while (ret == -1 && (s->get_error(s)) == EINTR);
389 389

  
390 390
    if (ret == -1) {
391
        qemu_file_set_error(s->file, -s->get_error(s));
391
        return -s->get_error(s);
392 392
    }
393
    return 0;
393 394
}
394 395

  
395 396
int migrate_fd_close(MigrationState *s)
b/migration.h
81 81
ssize_t migrate_fd_put_buffer(MigrationState *s, const void *data,
82 82
                              size_t size);
83 83
void migrate_fd_put_ready(MigrationState *s);
84
void migrate_fd_wait_for_unfreeze(MigrationState *s);
84
int migrate_fd_wait_for_unfreeze(MigrationState *s);
85 85
int migrate_fd_close(MigrationState *s);
86 86

  
87 87
void add_migration_state_change_notifier(Notifier *notify);

Also available in: Unified diff