From deb0844df1b073e8bd3d8350ffc4d703a9346dcc Mon Sep 17 00:00:00 2001 From: Yufeng He <40085740+he-yufeng@users.noreply.github.com> Date: Thu, 16 Jul 2026 22:31:59 +0800 Subject: [PATCH] [TransferEngine] Make single unregisterLocalMemory best-effort TransferEngineImpl::unregisterLocalMemory returned on the first transport whose unregister failed, leaving the region registered on the remaining transports and skipping the local bookkeeping erase. Collect the first error but attempt every transport, mirroring the batch path made best-effort in #2869. Refs #2869 Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> --- mooncake-transfer-engine/src/transfer_engine_impl.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mooncake-transfer-engine/src/transfer_engine_impl.cpp b/mooncake-transfer-engine/src/transfer_engine_impl.cpp index f5aeb00b9b..4d7fa47386 100644 --- a/mooncake-transfer-engine/src/transfer_engine_impl.cpp +++ b/mooncake-transfer-engine/src/transfer_engine_impl.cpp @@ -616,10 +616,14 @@ int TransferEngineImpl::registerLocalMemory(void* addr, size_t length, int TransferEngineImpl::unregisterLocalMemory(void* addr, bool update_metadata) { + // Best-effort: try every transport so one failure can't leave the region + // registered on the others; mirrors unregisterLocalMemoryBatch (#2869). + int first_error = 0; for (auto& transport : multi_transports_->listTransports()) { int ret = transport->unregisterLocalMemory(addr, update_metadata); - if (ret) return ret; + if (ret && !first_error) first_error = ret; } + if (first_error) return first_error; std::unique_lock lock(mutex_); eraseMemoryRegionLocked(addr);