drogonframework / drogonframework/drogon
HttpAppFrameworkImpl destructor crash on application exit
- Dominant language
- C++
- Stars
- 14.3k
- Forks
- 1.4k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 14
Description
I'm getting a crash on application exit on Visual Studio 2022 compiler because drogon::HttpAppFrameworkImpl destructor is not properly cleaning up objects. It is using something that relies on EventLoop after it was already destroyed when the destructors of static objects got invoked.
The minimal reconstructible example that I could make is this:
```cpp
int main(int argc, char* argv[])
{
drogon::app().run();
} // <- crash happens here
```
Here is the call stack right before the crash happens:

If i step over this line I get:

```
backend-api.exe!trantor::EventLoop::isInLoopThread() Line 107 (c:\dev\backend\build\_deps\drogon-src\trantor\trantor\net\EventLoop.h:107)
backend-api.exe!trantor::EventLoop::assertInLoopThread() Line 80 (c:\dev\backend\build\_deps\drogon-src\trantor\trantor\net\EventLoop.h:80)
backend-api.exe!trantor::TimingWheel::~TimingWheel() Line 68 (c:\dev\backend\build\_deps\drogon-src\trantor\trantor\utils\TimingWheel.cc:68)
backend-api.exe!trantor::TimingWheel::`scalar deleting destructor'(unsigned int) (Unknown Source:0)
backend-api.exe!std::_Destroy_in_place(trantor::TimingWheel & _Obj) Line 300 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:300)
backend-api.exe!std::_Ref_count_obj2::_Destroy() Line 2033 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:2033)
backend-api.exe!std::_Ref_count_base::_Decref() Line 1106 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1106)
backend-api.exe!std::_Ptr_base::_Decref() Line 1332 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1332)
backend-api.exe!std::shared_ptr::~shared_ptr() Line 1615 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1615)
backend-api.exe!std::pair>::~pair>() (Unknown Source:0)
backend-api.exe!std::pair>::`scalar deleting destructor'(unsigned int) (Unknown Source:0)
backend-api.exe!std::_Default_allocator_traits>,void *>>>::destroy>>(std::allocator>,void *>> & __formal, std::pair> * const _Ptr) Line 691 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:691)
backend-api.exe!std::_Tree_node>,void *>::_Freenode>,void *>>>(std::allocator>,void *>> & _Al, std::_Tree_node>,void *> * _Ptr) Line 381 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xtree:381)
backend-api.exe!std::_Tree_val>>>::_Erase_tree>,void *>>>(std::allocator>,void *>> & _Al, std::_Tree_node>,void *> * _Rootnode) Line 746 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xtree:746)
backend-api.exe!std::_Tree_val>>>::_Erase_head>,void *>>>(std::allocator>,void *>> & _Al) Line 753 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xtree:753)
backend-api.exe!std::_Tree,std::less,std::allocator>>,0>>::~_Tree,std::less,std::allocator>>,0>>() Line 1085 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xtree:1085)
backend-api.exe!std::map,std::less,std::allocator>>>::~map,std::less,std::allocator>>>() (Unknown Source:0)
backend-api.exe!trantor::TcpServer::~TcpServer() Line 46 (c:\dev\backend\build\_deps\drogon-src\trantor\trantor\net\TcpServer.cc:46)
backend-api.exe!drogon::HttpServer::~HttpServer() Line 180 (c:\dev\backend\build\_deps\drogon-src\lib\src\HttpServer.cc:180)
backend-api.exe!drogon::HttpServer::`scalar deleting destructor'(unsigned int) (Unknown Source:0)
backend-api.exe!std::_Destroy_in_place(drogon::HttpServer & _Obj) Line 300 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:300)
backend-api.exe!std::_Ref_count_obj2::_Destroy() Line 2033 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:2033)
backend-api.exe!std::_Ref_count_base::_Decref() Line 1106 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1106)
backend-api.exe!std::_Ptr_base::_Decref() Line 1332 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1332)
backend-api.exe!std::shared_ptr::~shared_ptr() Line 1615 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:1615)
backend-api.exe!std::shared_ptr::`scalar deleting destructor'(unsigned int) (Unknown Source:0)
backend-api.exe!std::destroy_at>(std::shared_ptr * const _Location) Line 313 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:313)
backend-api.exe!std::_Default_allocator_traits>>::destroy>(std::allocator> & __formal, std::shared_ptr * const _Ptr) Line 691 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:691)
backend-api.exe!std::_Destroy_range>>(std::shared_ptr * _First, std::shared_ptr * const _Last, std::allocator> & _Al) Line 941 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\xmemory:941)
backend-api.exe!std::vector,std::allocator>>::_Tidy() Line 1621 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\vector:1621)
backend-api.exe!std::vector,std::allocator>>::~vector,std::allocator>>() Line 595 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\vector:595)
backend-api.exe!drogon::ListenerManager::~ListenerManager() Line 58 (c:\dev\backend\build\_deps\drogon-src\lib\src\ListenerManager.h:58)
backend-api.exe!drogon::ListenerManager::`scalar deleting destructor'(unsigned int) (Unknown Source:0)
backend-api.exe!std::default_delete::operator()(drogon::ListenerManager * _Ptr) Line 3125 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:3125)
backend-api.exe!std::unique_ptr>::~unique_ptr>() Line 3235 (c:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.31.31103\include\memory:3235)
backend-api.exe!drogon::HttpAppFrameworkImpl::~HttpAppFrameworkImpl() Line 205 (c:\dev\backend\build\_deps\drogon-src\lib\src\HttpAppFrameworkImpl.cc:205)
backend-api.exe!`drogon::HttpAppFrameworkImpl::instance'::`2'::`dynamic atexit destructor for 'instance''() (Unknown Source:0)
ucrtbased.dll!00007ffd2b364957() (Unknown Source:0)
ucrtbased.dll!00007ffd2b364365() (Unknown Source:0)
ucrtbased.dll!00007ffd2b36449a() (Unknown Source:0)
ucrtbased.dll!00007ffd2b364b01() (Unknown Source:0)
ucrtbased.dll!00007ffd2b363cd1() (Unknown Source:0)
ucrtbased.dll!00007ffd2b363b7d() (Unknown Source:0)
ucrtbased.dll!00007ffd2b363bea() (Unknown Source:0)
ucrtbased.dll!00007ffd2b363e64() (Unknown Source:0)
ucrtbased.dll!00007ffd2b3641f6() (Unknown Source:0)
backend-api.exe!__scrt_common_main_seh() Line 297 (d:\a01\_work\43\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:297)
backend-api.exe!__scrt_common_main() Line 331 (d:\a01\_work\43\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331)
backend-api.exe!mainCRTStartup(void * __formal) Line 17 (d:\a01\_work\43\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17)
kernel32.dll!00007ffd4cfd6fd4() (Unknown Source:0)
ntdll.dll!00007ffd4d5bcec1() (Unknown Source:0)
```
Contributor guide
Assessment
This issue has not been assessed yet.