diff --git a/src/box/vinyl.c b/src/box/vinyl.c
index 50739f5d662c3469ac65681700f98a1b57fc1f54..887ffcd974570b86f71ae4ea4016ebd346d50588 100644
--- a/src/box/vinyl.c
+++ b/src/box/vinyl.c
@@ -4229,8 +4229,14 @@ vy_scheduler_remove_mem(struct vy_scheduler *scheduler, struct vy_mem *mem)
 	assert(!rlist_empty(&mem->in_dump_fifo));
 	rlist_del_entry(mem, in_dump_fifo);
 
-	if (!vy_scheduler_dump_in_progress(scheduler))
+	if (mem->generation < scheduler->generation &&
+	    !vy_scheduler_dump_in_progress(scheduler)) {
+		/*
+		 * The last in-memory tree left from the previous
+		 * generation has just been deleted, complete dump.
+		 */
 		vy_scheduler_complete_dump(scheduler);
+	}
 }
 
 /*