2017-09-29 10 views
0

이 보류 영원히 때 차단.grpc C++ CompletionQueue 종료라고하지만 CompletionQueue.next 하나는 CompletionQueue</p> <pre><code>debug_log("cq shutdown startn"); cq.Shutdown(); debug_log("cq shutdown successn"); </code></pre> <p>에 종료를 호출하고 다른 theads에, cq.next 영원히 차단, 두 개의 스레드가 있습니다 이벤트

나는 cq에 하나의 보류중인 이벤트가있는 것을 볼 수 있지만 문서에서 나는 일단 shutdown을 호출하면 cq.next가 false를 반환 할 것으로 예상한다.

여기에 무슨 문제가 있는지 알 수 없습니다. 여기

은 API 당신이 CQ를 방전시킨 후 cq.Next는 false를 돌려줍니다 의미 cq.next

grpc_iocp_work(grpc_exec_ctx * exec_ctx, gpr_timespec deadline) Line 83 C 
grpc_pollset_work(grpc_exec_ctx * exec_ctx, grpc_pollset * pollset, grpc_pollset_worker * * worker_hdl, gpr_timespec now, gpr_timespec deadline) Line 143 C 
cq_next(grpc_completion_queue * cc, gpr_timespec deadline, void * reserved) Line 844 C 
grpc_completion_queue_next(grpc_completion_queue * cc, gpr_timespec deadline, void * reserved) Line 873 C 
grpc::CompletionQueue::AsyncNextInternal(void * * tag, bool * ok, gpr_timespec deadline) Line 71 C++ 
grpc::CompletionQueue::Next(void * * tag, bool * ok) Line 151 C++ 

답변

0

에 대한 호출 스택이다. 하나의 보류중인 이벤트가 무엇을 의미하는지 확신 할 수 없지만 종료 이벤트가 아닌 경우 cq.Next는 해당 이벤트가 false를 반환하기 전에 반환 될 때까지 기다립니다 (다음 호출에서).