From be66edd09f0c79ca439b3fc36bb822baa1ca6cdb Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Wed, 19 Feb 2025 01:44:12 +0300 Subject: [PATCH] Prevent infinite loops on syncs in writeback_overflow --- src/client/cluster_client.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/client/cluster_client.cpp b/src/client/cluster_client.cpp index 099d08c5..37d2f1e0 100644 --- a/src/client/cluster_client.cpp +++ b/src/client/cluster_client.cpp @@ -309,16 +309,17 @@ void cluster_client_t::erase_op(cluster_op_t *op) } if (flags & OP_FLUSH_BUFFER) { + auto overflow = std::move(wb->writeback_overflow); int i = 0; - while (i < wb->writeback_overflow.size() && wb->writebacks_active < client_max_writeback_iodepth) + while (i < overflow.size() && wb->writebacks_active < client_max_writeback_iodepth) { - execute_internal(wb->writeback_overflow[i]); + execute_internal(overflow[i]); i++; } if (i > 0) - { - wb->writeback_overflow.erase(wb->writeback_overflow.begin(), wb->writeback_overflow.begin()+i); - } + overflow.erase(overflow.begin(), overflow.begin()+i); + assert(!wb->writeback_overflow.size()); + wb->writeback_overflow.swap(overflow); } }