[llvm] 2815ed5 - [ORC] Shut down dispatcher in ExecutorProcessControl implementations.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 12 13:40:23 PDT 2021


Author: Lang Hames
Date: 2021-10-12T13:40:15-07:00
New Revision: 2815ed57e3c99ab6c42399c3d0cf57cc118eb5df

URL: https://github.com/llvm/llvm-project/commit/2815ed57e3c99ab6c42399c3d0cf57cc118eb5df
DIFF: https://github.com/llvm/llvm-project/commit/2815ed57e3c99ab6c42399c3d0cf57cc118eb5df.diff

LOG: [ORC] Shut down dispatcher in ExecutorProcessControl implementations.

f3411616896 added a task dispatcher for async handlers, but didn't add a
TaskDispatcher::shutdown call to SelfExecutorProcessControl or SimpleRemoteEPC.
This patch adds the missing call, which ensures that we don't destroy the
dispatcher while tasks are still running.

This should fix the use-after-free crash seen in
https://lab.llvm.org/buildbot/#/builders/5/builds/13063

Added: 
    

Modified: 
    llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
    llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
index 014538759b8af..1c3d728409fef 100644
--- a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
@@ -130,7 +130,10 @@ void SelfExecutorProcessControl::callWrapperAsync(ExecutorAddr WrapperFnAddr,
   SendResult(WrapperFn(ArgBuffer.data(), ArgBuffer.size()));
 }
 
-Error SelfExecutorProcessControl::disconnect() { return Error::success(); }
+Error SelfExecutorProcessControl::disconnect() {
+  D->shutdown();
+  return Error::success();
+}
 
 void SelfExecutorProcessControl::writeUInt8sAsync(
     ArrayRef<tpctypes::UInt8Write> Ws, WriteResultFn OnWriteComplete) {

diff  --git a/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp b/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
index 0f198c75f8657..341e88443470d 100644
--- a/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/SimpleRemoteEPC.cpp
@@ -92,6 +92,7 @@ void SimpleRemoteEPC::callWrapperAsync(ExecutorAddr WrapperFnAddr,
 
 Error SimpleRemoteEPC::disconnect() {
   T->disconnect();
+  D->shutdown();
   std::unique_lock<std::mutex> Lock(SimpleRemoteEPCMutex);
   DisconnectCV.wait(Lock, [this] { return Disconnected; });
   return std::move(DisconnectErr);


        


More information about the llvm-commits mailing list