static int buffered_close(void *opaque) { QEMUFileBuffered *s = opaque; ssize_t ret = 0; int ret2; DPRINTF("closing\n"); s->xfer_limit = INT_MAX; while (!qemu_file_get_error(s->file) && s->buffer_size) { ret = buffered_flush(s); if (ret < 0) { break; } if (s->freeze_output) { ret = migrate_fd_wait_for_unfreeze(s->migration_state); if (ret < 0) { break; } } } ret2 = migrate_fd_close(s->migration_state); if (ret >= 0) { ret = ret2; } qemu_del_timer(s->timer); qemu_free_timer(s->timer); g_free(s->buffer); g_free(s); return ret; }
static int migrate_fd_cleanup(MigrationState *s) { int ret = 0; if (s->file) { DPRINTF("closing file\n"); ret = qemu_fclose(s->file); s->file = NULL; } migrate_fd_close(s); return ret; }
static int buffered_close(void *opaque) { MigrationState *s = opaque; ssize_t ret = 0; int ret2; DPRINTF("closing\n"); s->xfer_limit = INT_MAX; while (!qemu_file_get_error(s->file) && s->buffer_size) { ret = buffered_flush(s); if (ret < 0) { break; } } ret2 = migrate_fd_close(s); if (ret >= 0) { ret = ret2; } s->complete = true; return ret; }