Simplify TryPluck

pull/581/head
Craig Tiller 10 years ago
parent c7625b0e5f
commit d24d13d6eb
  1. 2
      include/grpc++/completion_queue.h
  2. 20
      src/cpp/common/completion_queue.cc
  3. 2
      src/cpp/server/server_context.cc

@ -114,7 +114,7 @@ class CompletionQueue {
bool Pluck(CompletionQueueTag *tag); bool Pluck(CompletionQueueTag *tag);
// Does a single polling pluck on tag // Does a single polling pluck on tag
void TryPluck(CompletionQueueTag *tag, bool forever); void TryPluck(CompletionQueueTag *tag);
grpc_completion_queue *cq_; // owned grpc_completion_queue *cq_; // owned
}; };

@ -77,22 +77,18 @@ bool CompletionQueue::Next(void** tag, bool* ok) {
bool CompletionQueue::Pluck(CompletionQueueTag* tag) { bool CompletionQueue::Pluck(CompletionQueueTag* tag) {
std::unique_ptr<grpc_event, EventDeleter> ev; std::unique_ptr<grpc_event, EventDeleter> ev;
for (;;) { ev.reset(grpc_completion_queue_pluck(cq_, tag, gpr_inf_future));
ev.reset(grpc_completion_queue_pluck(cq_, tag, gpr_inf_future)); bool ok = ev->data.op_complete == GRPC_OP_OK;
bool ok = ev->data.op_complete == GRPC_OP_OK; void* ignored = tag;
void* ignored = tag; GPR_ASSERT(tag->FinalizeResult(&ignored, &ok));
if (tag->FinalizeResult(&ignored, &ok)) { GPR_ASSERT(ignored == tag);
GPR_ASSERT(ignored == tag); return ok;
return ok;
}
}
} }
void CompletionQueue::TryPluck(CompletionQueueTag* tag, bool forever) { void CompletionQueue::TryPluck(CompletionQueueTag* tag) {
std::unique_ptr<grpc_event, EventDeleter> ev; std::unique_ptr<grpc_event, EventDeleter> ev;
ev.reset(grpc_completion_queue_pluck( ev.reset(grpc_completion_queue_pluck(cq_, tag, gpr_inf_past));
cq_, tag, forever ? gpr_inf_future : gpr_inf_past));
if (!ev) return; if (!ev) return;
bool ok = ev->data.op_complete == GRPC_OP_OK; bool ok = ev->data.op_complete == GRPC_OP_OK;
void* ignored = tag; void* ignored = tag;

@ -71,7 +71,7 @@ void ServerContext::CompletionOp::Unref() {
} }
bool ServerContext::CompletionOp::CheckCancelled(CompletionQueue* cq) { bool ServerContext::CompletionOp::CheckCancelled(CompletionQueue* cq) {
cq->TryPluck(this, false); cq->TryPluck(this);
std::lock_guard<std::mutex> g(mu_); std::lock_guard<std::mutex> g(mu_);
return finalized_ ? cancelled_ : false; return finalized_ ? cancelled_ : false;
} }

Loading…
Cancel
Save