Hi,
I got TSAN warnings when testing the hello world example in examples/cpp/helloworld/ (see detail warnings below). I also get similar TSAN warnings in other examples. Is it a known issue with gRPC?
Thanks,
Hung
greeter_client.cc
~/working/grpc-cmake-template $ ./client/greeter_client
==================
WARNING: ThreadSanitizer: data race (pid=35434)
Read of size 8 at 0x7f7f6c1ec6c0 by main thread:
#0 memmove <null> (libtsan.so.0+0x42c9b)
#1 absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node** std::__copy_move<false, true, std::random_access_iterator_tag>::__copy_m<absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node*>(absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node* const*, absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node* const*, absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node**) <null> (greeter_client+0x6ee12b)
#2 grpc_core::WorkSerializer::WorkSerializerImpl::Run(std::function<void ()>, grpc_core::DebugLocation const&) <null> (greeter_client+0x2ad92b)
#3 grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::FillOps(grpc::internal::Call*) /home/hungptit/working/grpc-cmake-template/3p/include/grpcpp/impl/codegen/call_op_set.h:896 (greeter_client+0x7e068)
#4 grpc::Channel::PerformOpsOnCall(grpc::internal::CallOpSetInterface*, grpc::internal::Call*) <null> (greeter_client+0x8c86d)
#5 grpc::internal::BlockingUnaryCallImpl<google::protobuf::MessageLite, google::protobuf::MessageLite>::BlockingUnaryCallImpl(grpc::ChannelInterface*, grpc::internal::RpcMethod const&, grpc::ClientContext*, google::protobuf::MessageLite const&, google::protobuf::MessageLite*) /home/hungptit/working/grpc-cmake-template/3p/include/grpcpp/impl/codegen/client_unary_call.h:80 (greeter_client+0x74453)
#6 grpc::Status grpc::internal::BlockingUnaryCall<helloworld::HelloRequest, helloworld::HelloReply, google::protobuf::MessageLite, google::protobuf::MessageLite>(grpc::ChannelInterface*, grpc::internal::RpcMethod const&, grpc::ClientContext*, helloworld::HelloRequest const&, helloworld::HelloReply*) /home/hungptit/working/grpc-cmake-template/3p/include/grpcpp/impl/codegen/client_unary_call.h:50 (greeter_client+0x722ee)
#7 helloworld::Greeter::Stub::SayHello(grpc::ClientContext*, helloworld::HelloRequest const&, helloworld::HelloReply*) /home/hungptit/working/grpc-cmake-template/proto/
helloworld.grpc.pb.cc:39 (greeter_client+0x63e56)
#8 GreeterClient::SayHello(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) <null> (greeter_client+0x5da52)
#9 main /home/hungptit/working/grpc-cmake-template/client/greeter_client.cpp:103 (greeter_client+0x5cc55)
Previous write of size 8 at 0x7f7f6c1ec6c0 by thread T3:
#0 memmove <null> (libtsan.so.0+0x42c9b)
#1 absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node** std::__copy_move<false, true, std::random_access_iterator_tag>::__copy_m<absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node*>(absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node* const*, absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node* const*, absl::lts_2020_09_23::synchronization_internal::(anonymous namespace)::Node**) <null> (greeter_client+0x6ee12b)
Thread T3 'grpc_global_tim' (tid=35438, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_client+0x6be24a)
#2 grpc::ChannelCredentials::ChannelCredentials() <null> (greeter_client+0x8ef60)
#3 __libc_start_main <null> (libc.so.6+0x23e39)
SUMMARY: ThreadSanitizer: data race (/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/libtsan.so.0+0x42c9b) in memmove
==================
Greeter received: Hello world
ThreadSanitizer: reported 1 warnings
greeter_server.cc
==================
WARNING: ThreadSanitizer: data race (pid=35355)
Read of size 8 at 0x7b8800003218 by thread T6:
#0 unsigned long const& std::min<unsigned long>(unsigned long const&, unsigned long const&) /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/g++-v10/bits/stl_algobase.h:235 (greeter_server+0x6857c)
#1 tcp_do_read((anonymous namespace)::grpc_tcp*) <null> (greeter_server+0x317410)
Previous write of size 8 at 0x7b8800003218 by thread T5:
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8bdbe)
#1 grpc_create_chttp2_transport(grpc_channel_args const*, grpc_endpoint*, bool, grpc_resource_user*) <null> (greeter_server+0x4239da)
Location is heap block of size 5648 at 0x7b8800003000 allocated by thread T5:
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8bdbe)
#1 grpc_create_chttp2_transport(grpc_channel_args const*, grpc_endpoint*, bool, grpc_resource_user*) <null> (greeter_server+0x4239da)
Thread T6 'grpcpp_sync_ser' (tid=35439, running) created by thread T5 at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
Thread T5 'grpcpp_sync_ser' (tid=35361, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
#2 main /home/hungptit/working/grpc-cmake-template/server/greeter_server.cpp:69 (greeter_server+0x65c05)
SUMMARY: ThreadSanitizer: data race /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/g++-v10/bits/stl_algobase.h:235 in unsigned long const& std::min<unsigned long>(unsigned long const&, unsigned long const&)
==================
==================
WARNING: ThreadSanitizer: data race (pid=35355)
Write of size 1 at 0x7b940000009a by thread T6:
#0 recvmsg <null> (libtsan.so.0+0x5907a)
#1 tcp_do_read((anonymous namespace)::grpc_tcp*) <null> (greeter_server+0x31767c)
Previous write of size 8 at 0x7b9400000098 by thread T5:
#0 malloc <null> (libtsan.so.0+0x3047f)
#1 gpr_malloc <null> (greeter_server+0x71a5ab)
Location is heap block of size 8264 at 0x7b9400000000 allocated by thread T5:
#0 malloc <null> (libtsan.so.0+0x3047f)
#1 gpr_malloc <null> (greeter_server+0x71a5ab)
Thread T6 'grpcpp_sync_ser' (tid=35439, running) created by thread T5 at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
Thread T5 'grpcpp_sync_ser' (tid=35361, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
#2 main /home/hungptit/working/grpc-cmake-template/server/greeter_server.cpp:69 (greeter_server+0x65c05)
SUMMARY: ThreadSanitizer: data race (/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/libtsan.so.0+0x5907a) in __interceptor_recvmsg
==================
==================
WARNING: ThreadSanitizer: data race (pid=35355)
Write of size 8 at 0x7b8800004120 by thread T6:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_chttp2_settings_parser_begin_frame(grpc_chttp2_settings_parser*, unsigned int, unsigned char, unsigned int*) <null> (greeter_server+0x4ee4d7)
Previous write of size 8 at 0x7b8800004120 by thread T5:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_chttp2_settings_parser_begin_frame(grpc_chttp2_settings_parser*, unsigned int, unsigned char, unsigned int*) <null> (greeter_server+0x4ee4d7)
Location is heap block of size 5648 at 0x7b8800003000 allocated by thread T5:
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8bdbe)
#1 grpc_create_chttp2_transport(grpc_channel_args const*, grpc_endpoint*, bool, grpc_resource_user*) <null> (greeter_server+0x4239da)
Thread T6 'grpcpp_sync_ser' (tid=35439, running) created by thread T5 at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
Thread T5 'grpcpp_sync_ser' (tid=35361, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
#2 main /home/hungptit/working/grpc-cmake-template/server/greeter_server.cpp:69 (greeter_server+0x65c05)
SUMMARY: ThreadSanitizer: data race (/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/libtsan.so.0+0x4257b) in __interceptor_memcpy
==================
==================
WARNING: ThreadSanitizer: data race (pid=35355)
Write of size 1 at 0x7b880000413a by thread T6:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_chttp2_settings_parser_begin_frame(grpc_chttp2_settings_parser*, unsigned int, unsigned char, unsigned int*) <null> (greeter_server+0x4ee4d7)
Previous read of size 1 at 0x7b880000413a by thread T5:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_chttp2_settings_parser_parse(void*, grpc_chttp2_transport*, grpc_chttp2_stream*, grpc_slice const&, int) <null> (greeter_server+0x4ee768)
Location is heap block of size 5648 at 0x7b8800003000 allocated by thread T5:
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8bdbe)
#1 grpc_create_chttp2_transport(grpc_channel_args const*, grpc_endpoint*, bool, grpc_resource_user*) <null> (greeter_server+0x4239da)
Thread T6 'grpcpp_sync_ser' (tid=35439, running) created by thread T5 at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
Thread T5 'grpcpp_sync_ser' (tid=35361, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
#2 main /home/hungptit/working/grpc-cmake-template/server/greeter_server.cpp:69 (greeter_server+0x65c05)
SUMMARY: ThreadSanitizer: data race (/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/libtsan.so.0+0x4257b) in __interceptor_memcpy
==================
==================
WARNING: ThreadSanitizer: data race (pid=35355)
Write of size 8 at 0x7b8800003230 by thread T6:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_slice_buffer_swap <null> (greeter_server+0x32d9a8)
Previous write of size 8 at 0x7b8800003230 by thread T5:
#0 memcpy <null> (libtsan.so.0+0x4257b)
#1 grpc_slice_buffer_swap <null> (greeter_server+0x32d9a8)
Location is heap block of size 5648 at 0x7b8800003000 allocated by thread T5:
#0 operator new(unsigned long) <null> (libtsan.so.0+0x8bdbe)
#1 grpc_create_chttp2_transport(grpc_channel_args const*, grpc_endpoint*, bool, grpc_resource_user*) <null> (greeter_server+0x4239da)
Thread T6 'grpcpp_sync_ser' (tid=35439, running) created by thread T5 at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
Thread T5 'grpcpp_sync_ser' (tid=35361, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5edc5)
#1 grpc_core::(anonymous namespace)::ThreadInternalsPosix::ThreadInternalsPosix(char const*, void (*)(void*), void*, bool*, grpc_core::Thread::Options const&) <null> (greeter_server+0x72088a)
#2 main /home/hungptit/working/grpc-cmake-template/server/greeter_server.cpp:69 (greeter_server+0x65c05)
SUMMARY: ThreadSanitizer: data race (/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/libtsan.so.0+0x4257b) in __interceptor_memcpy
==================