diff --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp --- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp +++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.cpp @@ -265,18 +265,21 @@ Error ExecutorSharedMemoryMapperService::shutdown() { std::vector ReservationAddrs; - if (!Reservations.empty()) { + { std::lock_guard Lock(Mutex); - { - ReservationAddrs.reserve(Reservations.size()); - for (const auto &R : Reservations) { - ReservationAddrs.push_back(ExecutorAddr::fromPtr(R.getFirst())); - } + + if (Reservations.empty()) + return Error::success(); + + ReservationAddrs.reserve(Reservations.size()); + for (const auto &R : Reservations) { + ReservationAddrs.push_back(ExecutorAddr::fromPtr(R.getFirst())); } + + Reservations.clear(); } - return release(ReservationAddrs); - return Error::success(); + return release(ReservationAddrs); } void ExecutorSharedMemoryMapperService::addBootstrapSymbols(