Repository navigation
Using fragments in query sometimes results in double-free/SEGV sanitizer crashes. #357
Copy link
Copy link
Closed
Description
Activity
Some more info. The double-free happens on default
RequestResolveParamsand launch ::deferred. On async we have different SEGV:AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL ================================================================= AddressSanitizer:DEADLYSIGNAL ==39050==ERROR: AddressSanitizer: SEGV on unknown address 0x19bbd00003806 (pc 0x7ffffcac9f7e bp 0x5060003776f8 sp 0x7ffecfe065e8 T105321) ==39050==The signal is caused by a WRITE memory access. AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL #0 0x7ffffcac9f7e in std::__detail::_List_node_base::_M_unhook() (/lib/x86_64-linux-gnu/libstdc++.so.6+0xcff7e) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #1 0x7ffffe20ad57 in graphql::service::SelectionVisitor::visitFragmentSpread(graphql::peg::ast_node const&) (/opt/ang/lib/libgraphqlservice.so+0x64d57) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #2 0x7ffffe20cd7d in graphql::service::Object::resolve(graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const::_ZNK7graphql7service6Object7resolveERKNS0_18SelectionSetParamsERKNS_3peg8ast_nodeERKNS_8internal10sorted_mapISt17basic_string_viewIcSt11char_traitsIcEENS0_8FragmentENS9_15shorter_or_lessEEERKNS_8response5ValueE.Frame*) [clone .actor] (/opt/ang/lib/libgraphqlservice.so+0x66d7d) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x7ffffe20d584 in graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const (/opt/ang/lib/libgraphqlservice.so+0x67584) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #4 0x7ffffe215103 in graphql::service::Result<graphql::service::Object>::convert(graphql::service::Result<graphql::service::Object>::convert(graphql::service::AwaitableObject<std::shared_ptr<graphql::service::Object const> >, graphql::service::ResolverParams&&)::_ZN7graphql7service6ResultINS0_6ObjectEE7convertENS0_15AwaitableObjectISt10shared_ptrIKS2_EEEONS0_14ResolverParamsE.Frame*) [clone .actor] (/opt/ang/lib/libgraphqlservice.so+0x6f103) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #5 0x7ffffcae6db3 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #6 0x7fffff145a41 in asan_thread_start ../../../../src/libsanitizer/asan/asan_interceptors.cpp:234 #7 0x7ffffc76baa3 (/lib/x86_64-linux-gnu/libc.so.6+0x9caa3) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) #8 0x7ffffc7f8a33 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x129a33) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: SEGV (/lib/x86_64-linux-gnu/libstdc++.so.6+0xcff7e) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) in std::__detail::_List_node_base::_M_unhook() Thread T105321 created by T105211 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T105211 created by T105086 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x555557450c59 in convert<> /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1029 #4 0x555557450c59 in graphql::mine::object::B::resolveX(graphql::service::ResolverParams&&) const graphql/schema/BObject.cpp:76 #5 0x5555574520b7 in operator() graphql/schema/BObject.cpp:42 #6 0x5555574520b7 in __invoke_impl<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::B::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:61 #7 0x5555574520b7 in __invoke_r<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::B::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:116 #8 0x5555574520b7 in _M_invoke /usr/include/c++/13/bits/std_function.h:291 #9 0x7ffffe209ed3 in graphql::service::SelectionVisitor::visitField(graphql::peg::ast_node const&) (/opt/ang/lib/libgraphqlservice.so+0x63ed3) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #10 0x7ffffe20cd7d in graphql::service::Object::resolve(graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const::_ZNK7graphql7service6Object7resolveERKNS0_18SelectionSetParamsERKNS_3peg8ast_nodeERKNS_8internal10sorted_mapISt17basic_string_viewIcSt11char_traitsIcEENS0_8FragmentENS9_15shorter_or_lessEEERKNS_8response5ValueE.Frame*) [clone .actor] (/opt/ang/lib/libgraphqlservice.so+0x66d7d) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #11 0x7ffffe20d584 in graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const (/opt/ang/lib/libgraphqlservice.so+0x67584) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T105086 created by T105078 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T105078 created by T104998 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x5555579005b2 in convert<> /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1029 #4 0x5555579005b2 in convert /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1182 #5 0x55555790d971 in std::__n4861::coroutine_handle<void>::resume() const /usr/include/c++/13/coroutine:135 #6 0x55555790d971 in graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}::operator()(std::__n4861::coroutine_handle<void>) const /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:515 #7 0x55555790d971 in void std::__invoke_impl<void, graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> >(std::__invoke_other, graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}&&, std::__n4861::coroutine_handle<void>&&) /usr/include/c++/13/bits/invoke.h:61 #8 0x55555790d971 in std::__invoke_result<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> >::type std::__invoke<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> >(graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}&&, std::__n4861::coroutine_handle<void>&&) /usr/include/c++/13/bits/invoke.h:96 #9 0x55555790d971 in void std::thread::_Invoker<std::tuple<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> > >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/13/bits/std_thread.h:292 #10 0x55555790d971 in std::thread::_Invoker<std::tuple<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> > >::operator()() /usr/include/c++/13/bits/std_thread.h:299 #11 0x55555790d971 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void> > > >::_M_run() /usr/include/c++/13/bits/std_thread.h:244 #12 0x7ffffcae6db3 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #13 0x7fffff145a41 in asan_thread_start ../../../../src/libsanitizer/asan/asan_interceptors.cpp:234 #14 0x7ffffc76baa3 (/lib/x86_64-linux-gnu/libc.so.6+0x9caa3) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) Thread T104998 created by T104995 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x5555578fed7f in std::thread::thread<graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}, std::__n4861::coroutine_handle<void>, void>(graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const::{lambda(std::__n4861::coroutine_handle<void>)#1}&&, std::__n4861::coroutine_handle<void>&&) /usr/include/c++/13/bits/std_thread.h:164 #3 0x5555578fed7f in graphql::service::AwaitableObject<std::vector<std::shared_ptr<graphql::mine::object::B>, std::allocator<std::shared_ptr<graphql::mine::object::B> > > >::await_suspend(std::__n4861::coroutine_handle<void>) const /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:512 #4 0x5555578fed7f in convert /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1156 #5 0x7ffffcae6db3 (/lib/x86_64-linux-gnu/libstdc++.so.6+0xecdb3) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #6 0x7fffff145a41 in asan_thread_start ../../../../src/libsanitizer/asan/asan_interceptors.cpp:234 #7 0x7ffffc76baa3 (/lib/x86_64-linux-gnu/libc.so.6+0x9caa3) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) Thread T104995 created by T104993 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x555557904751 in convert<(graphql::service::TypeModifier)2> /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1131 #4 0x555557904751 in graphql::mine::object::Something::resolveB(graphql::service::ResolverParams&&) const graphql/schema/SomethingObject.cpp:79 #5 0x55555790567d in operator() graphql/schema/SomethingObject.cpp:44 #6 0x55555790567d in __invoke_impl<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::Something::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:61 #7 0x55555790567d in __invoke_r<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::Something::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:116 #8 0x55555790567d in _M_invoke /usr/include/c++/13/bits/std_function.h:291 #9 0x7ffffe209ed3 in graphql::service::SelectionVisitor::visitField(graphql::peg::ast_node const&) (/opt/ang/lib/libgraphqlservice.so+0x63ed3) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #10 0x7ffffe20cd7d in graphql::service::Object::resolve(graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const::_ZNK7graphql7service6Object7resolveERKNS0_18SelectionSetParamsERKNS_3peg8ast_nodeERKNS_8internal10sorted_mapISt17basic_string_viewIcSt11char_traitsIcEENS0_8FragmentENS9_15shorter_or_lessEEERKNS_8response5ValueE.Frame*) [clone .actor] (/opt/ang/lib/libgraphqlservice.so+0x66d7d) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #11 0x7ffffe20d584 in graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const (/opt/ang/lib/libgraphqlservice.so+0x67584) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T104993 created by T104990 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T104990 created by T104987 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x55555786d256 in convert<> /workspace/ext/cppgraphqlgen/include/graphqlservice/GraphQLService.h:1029 #4 0x55555786d256 in graphql::mine::object::Query::resolveSomething(graphql::service::ResolverParams&&) const graphql/schema/QueryObject.cpp:470 #5 0x55555786dbf4 in operator() graphql/schema/QueryObject.cpp:65 #6 0x55555786dbf4 in __invoke_impl<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::Query::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:61 #7 0x55555786dbf4 in __invoke_r<graphql::internal::Awaitable<graphql::service::ResolverResult>, graphql::mine::object::Query::getResolvers() const::<lambda(graphql::service::ResolverParams&&)>&, graphql::service::ResolverParams> /usr/include/c++/13/bits/invoke.h:116 #8 0x55555786dbf4 in _M_invoke /usr/include/c++/13/bits/std_function.h:291 #9 0x7ffffe209ed3 in graphql::service::SelectionVisitor::visitField(graphql::peg::ast_node const&) (/opt/ang/lib/libgraphqlservice.so+0x63ed3) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #10 0x7ffffe20cd7d in graphql::service::Object::resolve(graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const::_ZNK7graphql7service6Object7resolveERKNS0_18SelectionSetParamsERKNS_3peg8ast_nodeERKNS_8internal10sorted_mapISt17basic_string_viewIcSt11char_traitsIcEENS0_8FragmentENS9_15shorter_or_lessEEERKNS_8response5ValueE.Frame*) [clone .actor] (/opt/ang/lib/libgraphqlservice.so+0x66d7d) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #11 0x7ffffe20d584 in graphql::service::Object::resolve(graphql::service::SelectionSetParams const&, graphql::peg::ast_node const&, graphql::internal::sorted_map<std::basic_string_view<char, std::char_traits<char> >, graphql::service::Fragment, graphql::internal::shorter_or_less> const&, graphql::response::Value const&) const (/opt/ang/lib/libgraphqlservice.so+0x67584) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T104987 created by T5 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffcae6eb0 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/lib/x86_64-linux-gnu/libstdc++.so.6+0xeceb0) (BuildId: ca77dae775ec87540acd7218fa990c40d1c94ab1) #2 0x7ffffe1fc72a in graphql::service::await_worker_thread::await_suspend(std::__n4861::coroutine_handle<void>) const (/opt/ang/lib/libgraphqlservice.so+0x5672a) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) #3 0x7ffffe20e9d2 in graphql::service::Request::resolve(graphql::service::RequestResolveParams) const (/opt/ang/lib/libgraphqlservice.so+0x689d2) (BuildId: 1c7b0b8d0d70e1d2cfc66ecfd68fb8b545ca269d) Thread T5 created by T0 here: #0 0x7fffff1dc1f9 in pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cpp:245 #1 0x7ffffeeb44cc in boost::thread::start_thread_noexcept() (/opt/ang/lib/libboost_thread.so.1.74.0+0xb4cc) (BuildId: 177c1f92b69dd0927e120cc5771e5e3f2c37a3b1) #2 0x555555712473 in boost::thread* boost::thread_group::create_thread<boost::_bi::bind_t<void, boost::_mfi::mf0<void, ANG::mpi::detail::shared_io_service_impl>, boost::_bi::list1<boost::_bi::value<ANG::mpi::detail::shared_io_service_impl*> > > >(boost::_bi::bind_t<void, boost::_mfi::mf0<void, ANG::mpi::detail::shared_io_service_impl>, boost::_bi::list1<boost::_bi::value<ANG::mpi::detail::shared_io_service_impl*> > >) /workspace/ext/boost/include/boost/thread/detail/thread_group.hpp:79 #3 0x555555712473 in ANG::mpi::detail::shared_io_service_impl::run() /workspace/base/mpi/src/./detail/shared_io_service_impl.h:50 #4 0x5555556e3da7 in ANG::mpi::basic_task_scheduler<ANG::mpi::detail::shared_io_service_impl>::run() /workspace/base/mpi/src/task_scheduler.h:47 #5 0x5555556e3da7 in main service/mine_ui_backend.cpp:245 #6 0x7ffffc6f91c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) #7 0x7ffffc6f928a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 42c84c92e6f98126b3e2230ebfdead22c235b667) #8 0x5555556de254 in _start (/workspace/apps/mine_ui_backend/bin/mine_ui_backend+0x18a254) (BuildId: 29838755b95449a17801e68e5505d620c899411b) ==39050==ABORTING AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNAL AddressSanitizer:DEADLYSIGNALCustom launch is planned for the future
- linked a pull request that will close this issuePrevent concurrent fragment resolution from corrupting directive stacks #363
on Sep 15, 2026
Metadata
Metadata
Assignees
Labels
No labels
Version used: 4.5.8 (checked the diff for 4.5.9 and it's irrelevant)
For debug purposes I'm running the app with sanitizer on and I'm sometimes getting crashes for same query. Imagine following body (slightly formatted for readability):
All
irrelevantfields are ints, doubles or enums. I don't know if it matters, but A, B, C and D in the application code are returned as a std::future. Requesting any of A, B or C fields will fill all three; D is a separate task.Doing this exact query, will result in sanitizer double-free attempt crash within few attempts (usually below 10). Here's example trace
If I remove A & B from the requests, it seems to work (ran over 100 requests without any issues).
If I remove D, I get sanitizer SEGV crash:
If I don't use fragments in the query but just duplicate the field names for every object in request, everything runs perfectly fine (hundreds of requests).