__gnu_cxx::recursive_init_error exception thrown by LLVM upon initialisation of OpenGL texture object
= System information:
-
GLX_MESA_query_renderer
- Device: AMD RAVEN (DRM 3.35.0, 5.4.48_1, LLVM 10.0.0) (0x15d8)
- Version: 20.1.1
-
xf86-video-amdgpu-19.1.0
-
Linux-5.4.48
= Problem description
Upon initialisation of an OpenGL texture (call to glTexImage2D
) a __gnu_cxx::recursive_init_error
exception is thrown from LLVM code that is called from radeonsi_dri.so
This issue might as well be an LLVM bug, however so far it only manifests in OpenGL programs on my system. As far as I can tell there is a race condition involved, since the exception is thrown on about 3 of 10 program launches, however the heavier the system is loaded, the more likely it is to appear.
= Relevant backtraces (backtraces of all threads attached as file)
Main thread:
Thread 1 (Thread 0x7ffff73fa740 (LWP 15213)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007ffff5bc4bf4 in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
>> #2 … #15 0x… in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#16 0x00007ffff59ccb0e in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#17 0x00000000004288c2 in ImGui_ImplOpenGL2_CreateFontsTexture () at ../3rd/imgui/examples/imgui_impl_opengl2.cpp:218
#18 0x000000000042895c in ImGui_ImplOpenGL2_CreateDeviceObjects () at ../3rd/imgui/examples/imgui_impl_opengl2.cpp:242
#19 0x00000000004281cd in ImGui_ImplOpenGL2_NewFrame () at ../3rd/imgui/examples/imgui_impl_opengl2.cpp:75
#20 0x000000000040265e in display () at ../src/alpha.cc:11
#21 0x00007ffff7ede57d in fghRedrawWindow () from /usr/lib/libglut.so.3
#22 0x00007ffff7edea42 in ?? () from /usr/lib/libglut.so.3
#23 0x00007ffff7edfa79 in fgEnumWindows () from /usr/lib/libglut.so.3
#24 0x00007ffff7edeb0d in glutMainLoopEvent () from /usr/lib/libglut.so.3
#25 0x00007ffff7edeba6 in glutMainLoop () from /usr/lib/libglut.so.3
#26 0x0000000000402817 in main (argc=1, argv=0x7fffffffd778) at ../src/alpha.cc:64
../3rd/imgui/examples/imgui_impl_opengl2.cpp:218
is a call to glTexImage2D
.
Crashing thread:
Thread 8 (Thread 0x7fffd7fff700 (LWP 15227)):
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff794455b in __GI_abort () at abort.c:79
#2 0x00007ffff7ce26ce in ?? () from /usr/lib/libstdc++.so.6
#3 0x00007ffff7d115a6 in ?? () from /usr/lib/libstdc++.so.6
#4 0x00007ffff7d11611 in std::terminate() () from /usr/lib/libstdc++.so.6
#5 0x00007ffff7d11864 in __cxa_throw () from /usr/lib/libstdc++.so.6
#6 0x00007ffff7ce2340 in ?? () from /usr/lib/libstdc++.so.6
#7 0x00007ffff0d45f58 in std::enable_if<llvm::hashing::detail::is_hashable_data<unsigned int const>::value, llvm::hash_code>::type llvm::hashing::detail::hash_combine_range_impl<unsigned int const>(unsigned int const*, unsigned int const*) () from /usr/lib/libLLVM-10.so
#8 0x00007ffff0d46217 in llvm::FoldingSetNodeIDRef::ComputeHash() const () from /usr/lib/libLLVM-10.so
#9 0x00007ffff0d4624b in llvm::FoldingSetNodeID::ComputeHash() const () from /usr/lib/libLLVM-10.so
#10 0x00007ffff0d462aa in llvm::FoldingSetBase::FindNodeOrInsertPos(llvm::FoldingSetNodeID const&, void*&) () from /usr/lib/libLLVM-10.so
#11 0x00007ffff0f18c58 in llvm::PMTopLevelManager::findAnalysisUsage(llvm::Pass*) () from /usr/lib/libLLVM-10.so
#12 0x00007ffff0f1ef33 in llvm::PMTopLevelManager::schedulePass(llvm::Pass*) () from /usr/lib/libLLVM-10.so
#13 0x00007ffff60acb0f in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#14 0x00007ffff5fee071 in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#15 0x00007ffff601cdfb in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#16 0x00007ffff5bc50e5 in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#17 0x00007ffff5bc4c47 in ?? () from /usr/lib/xorg/modules/drivers/radeonsi_dri.so
#18 0x00007ffff6e9ef27 in start_thread (arg=<optimized out>) at pthread_create.c:479
#19 0x00007ffff7a1be0f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Full backtrace: