segfault upon call to glDeleteFramebuffers()
On Linux Mint 20 with
Package: libglvnd0
Version: 1.3.2-1~ubuntu0.20.04.2
I get a segfault when the code calls glDeleteFramebuffers()
to delete a single framebuffer I generated earlier.
Here is the backtrace:
Thread 4 "netimgui_server" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff2819700 (LWP 373138)]
0x00007ffff74e5b69 in ?? () from /lib/x86_64-linux-gnu/libGLdispatch.so.0
(gdb) bt
#0 0x00007ffff74e5b69 in ?? () from /lib/x86_64-linux-gnu/libGLdispatch.so.0
#1 0x00005555556991b9 in NetImguiServer::App::HAL_DestroyRenderTarget (pOutRT=@0x555555c30bb8: 0x0, pOutTexture=@0x555555c30bc0: 0x4) at GlfwGL3/NetImguiServer_HAL_GL3.cpp:92
#2 0x00005555556747b2 in NetImguiServer::RemoteClient::Client::Reset (this=0x555555c30bb8) at NetImguiServer_RemoteClient.cpp:137
#3 0x0000555555670dd9 in NetImguiServer::Network::Communications_ClientExchangeLoop (pClientSocket=0x7fffec0014b0, pClient=0x555555c30bb8) at NetImguiServer_Network.cpp:198
#4 0x0000555555673d56 in std::__invoke_impl<void, void (*)(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*), NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*> (
__f=@0x7fffec0014e8: 0x555555670c96 <NetImguiServer::Network::Communications_ClientExchangeLoop(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*)>)
at /usr/include/c++/9/bits/invoke.h:60
#5 0x0000555555673c03 in std::__invoke<void (*)(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*), NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*> (
__fn=@0x7fffec0014e8: 0x555555670c96 <NetImguiServer::Network::Communications_ClientExchangeLoop(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*)>)
at /usr/include/c++/9/bits/invoke.h:95
#6 0x0000555555673a91 in std::thread::_Invoker<std::tuple<void (*)(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*), NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*> >::_M_invoke<0ul, 1ul, 2ul> (this=0x7fffec0014d8) at /usr/include/c++/9/thread:244
#7 0x00005555556739e7 in std::thread::_Invoker<std::tuple<void (*)(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*), NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*> >::operator() (this=0x7fffec0014d8) at /usr/include/c++/9/thread:251
#8 0x0000555555673976 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*), NetImgui::Internal::Network::SocketInfo*, NetImguiServer::RemoteClient::Client*> > >::_M_run (this=0x7fffec0014d0) at /usr/include/c++/9/thread:195
#9 0x00007ffff7e2fde4 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#10 0x00007ffff7bd4609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#11 0x00007ffff7af7133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) f 1
#1 0x00005555556991b9 in NetImguiServer::App::HAL_DestroyRenderTarget (pOutRT=@0x555555c30bb8: 0x0, pOutTexture=@0x555555c30bc0: 0x4) at GlfwGL3/NetImguiServer_HAL_GL3.cpp:92
92 glDeleteFramebuffers(1, &pRT);
(gdb) p pRT
$1 = 1
(gdb) p *pRT
Cannot access memory at address 0x1
Here is my code:
void HAL_DestroyRenderTarget(void*& pOutRT, void*& pOutTexture)
{
if(pOutRT)
{
GLuint pRT = static_cast<GLuint>(reinterpret_cast<uint64_t>(pOutRT));
pOutRT = nullptr;
glDeleteFramebuffers(1, &pRT);
}
if(pOutTexture)
{
GLuint pTexture = static_cast<GLuint>(reinterpret_cast<uint64_t>(pOutTexture));
pOutTexture = nullptr;
glDeleteTextures(1, &pTexture);
}
}