Skip to content

Crash on Http2ConnectionState::release_stream() #4504

@masaori335

Description

@masaori335

We got this crash on 8.0.x. This looks pretty similar to #4158. So #4158 (adding null check) could be workaround fix. But it looks like there is a race on shutdown which we should fix.

[ 0  ] libc-2.12.so       __libc_waitpid                                               ( :undefined                   ) 
[ 1  ] traffic_server     crash_logger_invoke                                          ( Crash.cc:165                 ) 
[ 2  ] libc-2.12.so       0x2b0b38dfd570                                               ( :undefined                   ) 
[ 3  ] traffic_server     Http2ConnectionState::release_stream(Http2Stream*)           ( Http2ConnectionState.cc:1261 ) 
[ 4  ] traffic_server     Http2Stream::destroy()                                       ( Http2Stream.cc:730           ) 
[ 5  ] traffic_server     Http2Stream::terminate_if_possible()                         ( Http2Stream.cc:380           ) 
[ 6  ] traffic_server     Http2Stream::main_event_handler(int, void*)                  ( Http2Stream.cc:131           ) 
[ 7  ] traffic_server     handleEvent                                                  ( I_Continuation.h:160         ) 
[ 8  ] traffic_server     EThread::process_event(Event*, int)                          ( UnixEThread.cc:131           ) 
[ 9  ] traffic_server     EThread::process_queue(Queue<Event, Event::Link_link>*, i... ( UnixEThread.cc:170           ) 
[ 10 ] traffic_server     EThread::execute_regular()                                   ( UnixEThread.cc:230           ) 
[ 11 ] traffic_server     spawn_thread_internal                                        ( Thread.cc:85                 ) 
[ 12 ] libpthread-2.12.so start_thread                                                 ( :undefined                   )

if (fini_received) {
// We were shutting down, go ahead and terminate the session
// this is a member of Http2ConnectionState and will be freed
// when ua_session is destroyed
ua_session->destroy();
// Can't do this because we just destroyed right here ^,
// or we can use a local variable to do it.
// ua_session = nullptr;

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions