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);