diff options
Diffstat (limited to 'offload/libomptarget/OffloadRTL.cpp')
-rw-r--r-- | offload/libomptarget/OffloadRTL.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/offload/libomptarget/OffloadRTL.cpp b/offload/libomptarget/OffloadRTL.cpp index 29b573a..04bd21e 100644 --- a/offload/libomptarget/OffloadRTL.cpp +++ b/offload/libomptarget/OffloadRTL.cpp @@ -22,6 +22,8 @@ extern void llvm::omp::target::ompt::connectLibrary(); static std::mutex PluginMtx; static uint32_t RefCount = 0; +std::atomic<bool> RTLAlive{false}; +std::atomic<int> RTLOngoingSyncs{0}; void initRuntime() { std::scoped_lock<decltype(PluginMtx)> Lock(PluginMtx); @@ -41,6 +43,9 @@ void initRuntime() { PM->init(); PM->registerDelayedLibraries(); + + // RTL initialization is complete + RTLAlive = true; } } @@ -50,6 +55,13 @@ void deinitRuntime() { if (RefCount == 1) { DP("Deinit offload library!\n"); + // RTL deinitialization has started + RTLAlive = false; + while (RTLOngoingSyncs > 0) { + DP("Waiting for ongoing syncs to finish, count: %d\n", + RTLOngoingSyncs.load()); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } PM->deinit(); delete PM; PM = nullptr; |