Hi guys,
I've just written an async gRPC++ server implementation, I'm able to successfully receive and finish one request, however the subsequent request fails as it's retrieved via ServerCompletionQueue::AsyncNext() within ServerContext::BeginCompletionOp() when asserting !compleition_op_ on line 269. Sequence of events are as follows:
1. Register to receive multiple requests for various rpc calls.
2. Send rpc request from client app.
3. Receive and finish rpc request.
4. Register to receive the request again.
5. Send same rpc request from client app.
6. Assert fails during call to ServerCompletionQueue::AsyncNext() as the request arrives server side.
Terminal Output:
E0113 21:37:39.692948234 130281 server_context.cc:269] assertion failed: !completion_op_
Stack Trace from call to AsyncNext:
__GI_raise(int sig) (/build/glibc-OTsEL5/glibc-2.27/sysdeps/unix/sysv/linux/raise.c:51)
__GI_abort() (/build/glibc-OTsEL5/glibc-2.27/stdlib/abort.c:79)
grpc::ServerContext::BeginCompletionOp(grpc::internal::Call*, bool) (Unknown Source:0)
grpc::ServerInterface::BaseAsyncRequest::FinalizeResult(void**, bool*) (Unknown Source:0)
grpc::ServerInterface::RegisteredAsyncRequest::FinalizeResult(grpc::ServerInterface::RegisteredAsyncRequest * const this, void ** tag, bool * status) (/usr/local/include/grpcpp/impl/codegen/server_interface.h:194)
grpc::ServerInterface::PayloadAsyncRequest<OpenIoTServer::CompileVMRequest>::FinalizeResult(grpc::ServerInterface::PayloadAsyncRequest<OpenIoTServer::CompileVMRequest> * const this, void ** tag, bool * status) (/usr/local/include/grpcpp/impl/codegen/server_interface.h:274)
grpc::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) (Unknown Source:0)
grpc::CompletionQueue::AsyncNext<std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > > >(grpc::CompletionQueue * const this, void ** tag, bool * ok, const std::chrono::time_point<std::chrono::_V2::system_clock, std::chrono::duration<long, std::ratio<1, 1000000000> > > & deadline) (/usr/local/include/grpcpp/impl/codegen/completion_queue.h:190)
Is anyone able to offer any thoughts as to why compleition_op_ may not be getting cleared?
Many thanks