From: Eugene Zhulenev Date: Tue, 1 Dec 2020 08:44:32 +0000 (-0800) Subject: [mlir] AsyncRuntime: disable threading until test flakiness is fixed X-Git-Tag: llvmorg-13-init~4771 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9edcedf7f222ce7c893d1e3bf19b3a7a1f0f2218;p=platform%2Fupstream%2Fllvm.git [mlir] AsyncRuntime: disable threading until test flakiness is fixed ExecutionEngine/LLJIT do not run globals destructors in loaded dynamic libraries when destroyed, and threads managed by ThreadPool can race with program termination, and it leads to segfaults. TODO: Re-enable threading after fixing a problem with destructors, or removing static globals from dynamic library. Differential Revision: https://reviews.llvm.org/D92368 --- diff --git a/mlir/lib/ExecutionEngine/AsyncRuntime.cpp b/mlir/lib/ExecutionEngine/AsyncRuntime.cpp index 6bf59f8..3b90b9c 100644 --- a/mlir/lib/ExecutionEngine/AsyncRuntime.cpp +++ b/mlir/lib/ExecutionEngine/AsyncRuntime.cpp @@ -24,8 +24,6 @@ #include #include -#include "llvm/Support/ThreadPool.h" - //===----------------------------------------------------------------------===// // Async runtime API. //===----------------------------------------------------------------------===// @@ -45,7 +43,6 @@ public: AsyncRuntime() : numRefCountedObjects(0) {} ~AsyncRuntime() { - threadPool.wait(); // wait for the completion of all async tasks assert(getNumRefCountedObjects() == 0 && "all ref counted objects must be destroyed"); } @@ -54,8 +51,6 @@ public: return numRefCountedObjects.load(std::memory_order_relaxed); } - llvm::ThreadPool &getThreadPool() { return threadPool; } - private: friend class RefCounted; @@ -69,8 +64,6 @@ private: } std::atomic numRefCountedObjects; - - llvm::ThreadPool threadPool; }; // Returns the default per-process instance of an async runtime. @@ -241,8 +234,7 @@ extern "C" void mlirAsyncRuntimeAwaitAllInGroup(AsyncGroup *group) { } extern "C" void mlirAsyncRuntimeExecute(CoroHandle handle, CoroResume resume) { - auto *runtime = getDefaultAsyncRuntimeInstance(); - runtime->getThreadPool().async([handle, resume]() { (*resume)(handle); }); + (*resume)(handle); } extern "C" void mlirAsyncRuntimeAwaitTokenAndExecute(AsyncToken *token,