#include <vector>
#include "absl/base/thread_annotations.h"
#include <grpc/grpc.h>
#include <grpc/support/cpu.h>
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
#include <grpcpp/completion_queue.h>
#include <grpcpp/impl/completion_queue_tag.h>
#include <grpcpp/impl/grpc_library.h>
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/thd.h"
namespace grpc {
namespace {
gpr_once g_once_init_callback_alternative = …;
grpc_core::Mutex* g_callback_alternative_mu;
struct CallbackAlternativeCQ { … };
CallbackAlternativeCQ g_callback_alternative_cq;
}
CompletionQueue::CompletionQueue(grpc_completion_queue* take)
: … { … }
void CompletionQueue::Shutdown() { … }
CompletionQueue::NextStatus CompletionQueue::AsyncNextInternal(
void** tag, bool* ok, gpr_timespec deadline) { … }
CompletionQueue::CompletionQueueTLSCache::CompletionQueueTLSCache(
CompletionQueue* cq)
: … { … }
CompletionQueue::CompletionQueueTLSCache::~CompletionQueueTLSCache() { … }
bool CompletionQueue::CompletionQueueTLSCache::Flush(void** tag, bool* ok) { … }
CompletionQueue* CompletionQueue::CallbackAlternativeCQ() { … }
void CompletionQueue::ReleaseCallbackAlternativeCQ(CompletionQueue* cq)
ABSL_NO_THREAD_SAFETY_ANALYSIS { … }
}