Did you destruct the mServer and mCQ before destroying the rpc? If you keep
either one living after the rpc's are all destroyed, does it still crash?



On Wed, Sep 20, 2017 at 2:35 PM, Arpit Baldeva <[email protected]> wrote:

> Hi,
>
> I see an occasional when shutting down my server (version 1.4.2, VS 2015,
> Windows).
>
> My set up: I use async api and have 2 threads.
> 1.  Thread 1 processes the tags from the completion queue. It also
> executes the shutdown request.
> 2. Thread 2 plucks the tags from the completion queue and queues them for
> the thread 1 to process.
>
> After running for a while, on thread 1, I call server shutdown followed by
> the completion queue shutdown. The code looks like
>
>  if (mServer != nullptr)
>         mServer->Shutdown(gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
> gpr_time_from_micros((deadline - TimeValue::getTimeOfDay()).getMicroSeconds(),
> GPR_TIMESPAN)));
>
>     if (mCQ != nullptr)
>         mCQ->Shutdown();
>
> Meanwhile, thread 2 is doing following
>
>  while (true)
>     {
>         if (!mCQ->Next((void**)&tagInfo.tagProcessor, &tagInfo.ok))
>         {
>
>             break;
>         }
> }
>
>
> So at some point, thread 2 notices that the completion queue has been
> shutdown and it exits out of the loop.
>
> Thread 1 continues to process the tags that were received previously. One
> of them happened to be 'done' tag of a previous rpc operation and in
> response to it, I destroy the rpc (my own class). This causes the
> ServerContext held by the rpc to be destroyed and I see following crash.
>
> ntdll.dll!00007ffe6f7ebbdf() Unknown
>   ntdll.dll!00007ffe6f7c4571() Unknown
>   ntdll.dll!00007ffe6f7c4490() Unknown
>         gpr_mu_lock(gpr_mu * mu) Line 53 C
>   interned_slice_destroy(interned_slice_refcount * s) Line 94 C
>   interned_slice_unref(grpc_exec_ctx * exec_ctx, void * p) Line 112 C
>   grpc_slice_unref_internal(grpc_exec_ctx * exec_ctx, grpc_slice slice)
> Line 76 C
>   destroy_channel_elem(grpc_exec_ctx * exec_ctx, grpc_channel_element *
> elem) Line 926 C
>   grpc_channel_stack_destroy(grpc_exec_ctx * exec_ctx, grpc_channel_stack
> * stack) Line 166 C
>   destroy_channel(grpc_exec_ctx * exec_ctx, void * arg, grpc_error *
> error) Line 383 C
>   grpc_exec_ctx_flush(grpc_exec_ctx * exec_ctx) Line 85 C
>   grpc_exec_ctx_finish(grpc_exec_ctx * exec_ctx) Line 100 C
>   grpc_call_unref(grpc_call * c) Line 579 C
>   grpc::ServerContext::~ServerContext() Line 157 C++
>
> Is it possible that the shutdown sequence is just a red herring and the
> bug is something else? Or is my shutdown sequence wrong (I can't delete
> ServerContext after shutting down server and completion queue)?
>
> Any tips appreciated.
>
> Thanks.
>
>
> --
> You received this message because you are subscribed to the Google Groups "
> grpc.io" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/grpc-io.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/grpc-io/2e7f038e-8d19-4989-8f2a-8e09536afb33%40googlegroups.com
> <https://groups.google.com/d/msgid/grpc-io/2e7f038e-8d19-4989-8f2a-8e09536afb33%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAB1HKY55X8HpJWqGo-fkYzQbgAMsRphbqgWOHub98tN7vhYntg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to