23#include <glog/logging.h>
25#include "reactor_with_wait_until_done.hpp"
29namespace presage::smartspectra::grpc_bindings {
32template<
typename TReactor>
33void ReactorWithWaitUntilDone<TReactor>::HandleWaitingThreads() {
35 std::unique_lock<std::mutex> lock(done_mutex);
39 if (this->waiting_thread_count > 0) {
40 std::unique_lock<std::mutex> lock(done_mutex);
41 done_cv.wait(lock, [
this] {
return waiting_thread_count == 0; });
45template<
typename TReactor>
46void ReactorWithWaitUntilDone<TReactor>::WaitUntilDone() {
47 std::unique_lock<std::mutex> lock(done_mutex);
48 this->waiting_thread_count++;
49 done_cv.wait(lock, [
this] {
return this->done; });
50 this->waiting_thread_count--;
54template<
typename TReactor>
55void ReactorWithWaitUntilDone<TReactor>::OnDone() {
56 HandleWaitingThreads();
59template<
typename TReactor>
60void ReactorWithWaitUntilDone<TReactor>::OnCancel() {
61 HandleWaitingThreads();
62 LOG(ERROR) <<
"RPC Cancelled";