ilya-biryukov added inline comments.
================ Comment at: clangd/Threading.h:60 +/// A point in time we may wait for, or None to wait forever. +/// (We use Optional because buggy implementations of std::chrono overflow...) +using Deadline = llvm::Optional<std::chrono::steady_clock::time_point>; ---------------- Maybe remove the comment or add more context (i.e. add references) on why the overflow is buggy? ================ Comment at: clangd/Threading.h:66 +template <typename Func> +LLVM_NODISCARD bool wait(std::mutex &Mutex, std::condition_variable &CV, + Deadline D, Func F) { ---------------- Maybe move this helper to .cpp file? ================ Comment at: clangd/Threading.h:68 + Deadline D, Func F) { + std::unique_lock<std::mutex> Lock(Mutex); + if (D) ---------------- Maybe keep the locking part out of this helper? It's often desirable to hold the lock after `wait()`. This will model how `std::condition_variable::wait` is defined. ================ Comment at: clangd/Threading.h:83 - void waitForAll(); + bool waitForAll(Deadline D = llvm::None) const; void runAsync(UniqueFunction<void()> Action); ---------------- Add `LLVM_NODICARD` here? For that particular method maybe we could have two overload: with and without the deadline, i.e. ``` void waitForAll() const; LLVM_NODISCARD bool waitForAll(Deadline D) const; ``` There are places (like the destructor of this class) where the first overload is used and consuming the return value is just adding noise, but clients passing the deadline (e.g. `blockUntilIdle()`) should definitely consume the return value. ================ Comment at: unittests/clangd/ClangdTests.cpp:784 class NoConcurrentAccessDiagConsumer : public DiagnosticsConsumer { - public: - NoConcurrentAccessDiagConsumer(std::promise<void> StartSecondReparse) - : StartSecondReparse(std::move(StartSecondReparse)) {} - - void onDiagnosticsReady( - PathRef File, - Tagged<std::vector<DiagWithFixIts>> Diagnostics) override { + std::atomic<bool> InCallback = {false}; ---------------- Do we need to change this test? It was specifically designed to keep the second request from overriding the first one before it was processed. Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D43127 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits