diff --git a/src/box/vy_write_iterator.c b/src/box/vy_write_iterator.c index f6e6ed4d2..7d8c60d73 100644 --- a/src/box/vy_write_iterator.c +++ b/src/box/vy_write_iterator.c @@ -790,8 +790,11 @@ next_lsn: * statement around if this is major compaction, because * there's no tuple it could overwrite. */ - if (rc == 0 && stream->is_last_level && - stream->deferred_delete_stmt != NULL) { + if (rc != 0) { + for (int i = 0; i < stream->rv_count; ++i) + stream->read_views[i].history = NULL; + } else if (stream->is_last_level && + stream->deferred_delete_stmt != NULL) { vy_stmt_unref_if_possible(stream->deferred_delete_stmt); stream->deferred_delete_stmt = NULL; } @@ -961,11 +964,8 @@ vy_write_iterator_build_read_views(struct vy_write_iterator *stream, int *count) size_t used = region_used(region); stream->rv_used_count = 0; if (vy_write_iterator_build_history(stream, &raw_count, - &is_first_insert) != 0) { - for (int i = 0; i < stream->rv_count; ++i) - stream->read_views[i].history = NULL; + &is_first_insert) != 0) goto error; - } if (raw_count == 0) { /* A key is fully optimized. */ region_truncate(region, used);