[llvm] [Offload] Improve `olDestroyQueue` logic (PR #153041)

Ross Brunton via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 19 01:49:24 PDT 2025


================
@@ -75,6 +76,39 @@ template <typename Fn> inline void threadify(Fn body) {
   }
 }
 
+// Enqueues a task to the queue that can be manually resolved.
+// It will block until `trigger` is called.
+struct ManuallyTriggeredTask {
+  std::mutex M;
+  std::condition_variable CV;
+  bool Flag = false;
+  ol_event_handle_t CompleteEvent;
+
+  ol_result_t enqueue(ol_queue_handle_t Queue) {
+    if (auto Err = olLaunchHostFunction(
+            Queue,
+            [](void *That) {
+              reinterpret_cast<ManuallyTriggeredTask *>(That)->wait();
+            },
+            this))
+      return Err;
+
+    return olCreateEvent(Queue, &CompleteEvent);
+  }
+
+  void wait() {
+    std::unique_lock<std::mutex> lk(M);
+    CV.wait_for(lk, std::chrono::milliseconds(1000), [&] { return Flag; });
+  }
+
+  ol_result_t trigger() {
+    Flag = true;
+    CV.notify_one();
+
+    return olSyncEvent(CompleteEvent);
+  }
+};
----------------
RossBrunton wrote:

I think it's a good general purpose class that can be used in multiple places, yes. That's why I put it in `Fixtures.hpp`.

https://github.com/llvm/llvm-project/pull/153041


More information about the llvm-commits mailing list