It seems I am making trouble when register NotifyOnStateChange() callback on Channel. It happen when I try to close the channel, but the assert statement in completion_queue.c will abort the program.
client service shutdown completed
E0819 11:40:07.060754939 15617 completion_queue.c:189] assertion failed: cc->completed_head.next == (uintptr_t)&cc->completed_head
Program received signal SIGABRT, Aborted.
0x00007ffff69d5c37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0 0x00007ffff69d5c37 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x00007ffff69d9028 in __GI_abort () at abort.c:89
#2 0x00007ffff6209355 in grpc_cq_internal_unref () from /usr/local/lib/libgrpc.so.0
#3 0x000000000174800f in grpc::CompletionQueue::~CompletionQueue() ()
However, if I don't register this callback, everything is fine. Is there something this NotifyOnStateChange will create special job in completion queue that can prevent completion_queue to shut down properly ?
Thanks for any advice.