aboutsummaryrefslogtreecommitdiff
path: root/offload/libomptarget/OffloadRTL.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'offload/libomptarget/OffloadRTL.cpp')
-rw-r--r--offload/libomptarget/OffloadRTL.cpp12
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;