Skip to content

core: crash on runtime load on destruction #674

@junr03

Description

@junr03

0  libsystem_kernel.dylib  ___pthread_kill
1  libsystem_pthread.dylib _pthread_kill
2  libsystem_c.dylib       _abort
3  Lyft                    Envoy::Runtime::LoaderImpl::snapshot() (Lyft)
4  Lyft                    Envoy::Upstream::ResourceManagerImpl::ResourceImpl::max() (Lyft)
5  Lyft                    Envoy::Upstream::ResourceManagerImpl::ResourceImpl::decBy(unsigned long long) (Lyft)
6  Lyft                    Envoy::Extensions::HttpFilters::DynamicForwardProxy::ProxyFilter::~ProxyFilter() (Lyft)
7  Lyft                    Envoy::Http::ConnectionManagerImpl::ActiveStreamDecoderFilter::~ActiveStreamDecoderFilter() (Lyft)
8  Lyft                    Envoy::Http::ConnectionManagerImpl::ActiveStream::~ActiveStream() (Lyft)
9  Lyft                    Envoy::Http::ConnectionManagerImpl::ActiveStream::~ActiveStream() (Lyft)
10 Lyft                    Envoy::Http::ConnectionManagerImpl::~ConnectionManagerImpl() (Lyft)
11 Lyft                    non-virtual thunk to Envoy::Http::ConnectionManagerImpl::~ConnectionManagerImpl() (Lyft)
12 Lyft                    Envoy::Server::HttpApiListener::~HttpApiListener() (Lyft)
13 Lyft                    Envoy::Server::ListenerManagerImpl::~ListenerManagerImpl() (Lyft)
14 Lyft                    Envoy::Server::ListenerManagerImpl::~ListenerManagerImpl() (Lyft)
15 Lyft                    Envoy::Server::InstanceImpl::~InstanceImpl() (Lyft)
16 Lyft                    Envoy::Server::InstanceImpl::~InstanceImpl() (Lyft)
17 Lyft                    Envoy::MainCommonBase::~MainCommonBase() (Lyft)
18 Lyft                    Envoy::Engine::run(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) (Lyft)
19 Lyft                    void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, envoy_status_t (Envoy::Engine::*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >), Envoy::Engine*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >(void*) (Lyft)
20 libsystem_pthread.dylib __pthread_start```

The assertion tripped is https://github.com/envoyproxy/envoy/blob/ea65c4e935e6af4eef75d39c1e03b9a64ac30d70/source/common/runtime/runtime_impl.cc#L634

This is happening because the ApiListener is being destroyed after the tls has been cleaned up for the main thread, and the assertion relies on TLS size being non-zero to define the thread as registered.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions