Crash - Failure in ~vtkRenderWindowInteractor
I'm using VTK 8.2.0 (Release) and the following stacktrace gets generated when calling in main:
viewer = nullptr;
The line previous is:
std::cout << "Viewer refcount: " << viewer.use_count() << std::endl;
Which prints:
Viewer refcount: 1
viewer is defined as so:
std::shared_ptr<scrimmage::Viewer> viewer = std::make_shared<scrimmage::Viewer>();
The error message reported is:
Segmentation fault (core dumped)
The stack trace is:
$ gdb scrimmage /var/lib/apport/coredump/<DUMP_FILE>
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.`
`For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from scrimmage...
[New LWP 1591358]
[New LWP 1591372]
[New LWP 1591374]
[New LWP 1591373]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by 'scrimmage <FILE>.xml'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007f4509ed86af in vtkRenderWindowInteractor::~vtkRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:147
147 this->InteractorStyle->UnRegister(this);
[Current thread is 1 (Thread 0x7f4506128800 (LWP 1591358))]
(gdb) bt
#0 0x00007f4509ed86af in vtkRenderWindowInteractor::~vtkRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:147
#1 0x00007f4509ed87b4 in vtkRenderWindowInteractor::~vtkRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:162
#2 0x00007f450b804158 in vtkObjectBase::UnRegisterInternal (this=0x562b99680b10, check=0) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:240
#3 0x00007f450b802b1b in vtkObject::UnRegisterInternal (this=0x562b99680b10, o=0x562b996e6530, check=0) at $HOME/Projects/VTK/Common/Core/vtkObject.cxx:900
#4 0x00007f450b804016 in vtkObjectBase::UnRegister (this=0x562b99680b10, o=0x562b996e6530) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:197
#5 0x00007f4509ed8977 in vtkRenderWindowInteractor::UnRegister (this=0x562b99680b10, o=0x562b996e6530) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:207
#6 0x00007f4509ecae82 in vtkRenderWindow::SetInteractor (this=0x562b996e6530, rwi=0x0) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindow.cxx:154
#7 0x00007f4509ecaa3a in vtkRenderWindow::~vtkRenderWindow (this=0x562b996e6530, __in_chrg=<optimized out>) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindow.cxx:90
#8 0x00007f450bdc16ca in vtkOpenGLRenderWindow::~vtkOpenGLRenderWindow (this=0x562b996e6530, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx:234
#9 0x00007f450be7cf05 in vtkXOpenGLRenderWindow::~vtkXOpenGLRenderWindow (this=0x562b996e6530, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx:340
#10 0x00007f450be7cf38 in vtkXOpenGLRenderWindow::~vtkXOpenGLRenderWindow (this=0x562b996e6530, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx:354
#11 0x00007f450b804158 in vtkObjectBase::UnRegisterInternal (this=0x562b996e6530, check=0) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:240
#12 0x00007f450b802b1b in vtkObject::UnRegisterInternal (this=0x562b996e6530, o=0x562b99680b10, check=0) at $HOME/Projects/VTK/Common/Core/vtkObject.cxx:900
#13 0x00007f450b804016 in vtkObjectBase::UnRegister (this=0x562b996e6530, o=0x562b99680b10) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:197
#14 0x00007f4509ece820 in vtkRenderWindow::UnRegister (this=0x562b996e6530, o=0x562b99680b10) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindow.cxx:921
#15 0x00007f4509ed8a8b in vtkRenderWindowInteractor::SetRenderWindow (this=0x562b99680b10, aren=0x0) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:246
#16 0x00007f4509ed8784 in vtkRenderWindowInteractor::~vtkRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:161
#17 0x00007f450be6d33c in vtkXRenderWindowInteractor::~vtkXRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/OpenGL2/vtkXRenderWindowInteractor.cxx:108
#18 0x00007f450be6d360 in vtkXRenderWindowInteractor::~vtkXRenderWindowInteractor (this=0x562b99680b10, __in_chrg=<optimized out>)
at $HOME/Projects/VTK/Rendering/OpenGL2/vtkXRenderWindowInteractor.cxx:131
#19 0x00007f450b804158 in vtkObjectBase::UnRegisterInternal (this=0x562b99680b10, check=0) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:240
#20 0x00007f450b802b1b in vtkObject::UnRegisterInternal (this=0x562b99680b10, o=0x0, check=0) at $HOME/Projects/VTK/Common/Core/vtkObject.cxx:900
#21 0x00007f450b804016 in vtkObjectBase::UnRegister (this=0x562b99680b10, o=0x0) at $HOME/Projects/VTK/Common/Core/vtkObjectBase.cxx:197
#22 0x00007f4509ed8977 in vtkRenderWindowInteractor::UnRegister (this=0x562b99680b10, o=0x0) at $HOME/Projects/VTK/Rendering/Core/vtkRenderWindowInteractor.cxx:207
#23 0x00007f450b8bf169 in vtkSmartPointerBase::~vtkSmartPointerBase (this=0x562b996885e0, __in_chrg=<optimized out>) at $HOME/Projects/VTK/Common/Core/vtkSmartPointerBase.cxx:62
#24 0x00007f450ca7c616 in vtkSmartPointer<vtkRenderWindowInteractor>::~vtkSmartPointer (this=0x562b996885e0, __in_chrg=<optimized out>) at /usr/include/vtk-8.2/vtkSmartPointer.h:30
#25 0x00007f450cac133d in scrimmage::Viewer::~Viewer (this=0x562b996885d0, __in_chrg=<optimized out>) at $HOME/scrimmage/src/viewer/Viewer.cpp:50
#26 0x0000562b995227ba in __gnu_cxx::new_allocator<scrimmage::Viewer>::destroy<scrimmage::Viewer> (this=0x562b996885d0, __p=0x562b996885d0) at /usr/include/c++/9/ext/new_allocator.h:152
#27 0x0000562b9952274f in std::allocator_traits<std::allocator<scrimmage::Viewer> >::destroy<scrimmage::Viewer> (__a=..., __p=0x562b996885d0) at /usr/include/c++/9/bits/alloc_traits.h:496
#28 0x0000562b995225c1 in std::_Sp_counted_ptr_inplace<scrimmage::Viewer, std::allocator<scrimmage::Viewer>, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x562b996885c0)
at /usr/include/c++/9/bits/shared_ptr_base.h:557
#29 0x0000562b9951ca70 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x562b996885c0) at /usr/include/c++/9/bits/shared_ptr_base.h:155
#30 0x0000562b9951bf43 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x7fff2bef3998, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr_base.h:730
#31 0x0000562b9951ba8e in std::__shared_ptr<scrimmage::Viewer, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7fff2bef3990, __in_chrg=<optimized out>)
at /usr/include/c++/9/bits/shared_ptr_base.h:1169
#32 0x0000562b9951dbae in std::__shared_ptr<scrimmage::Viewer, (__gnu_cxx::_Lock_policy)2>::operator= (this=0x7fff2bef3a30, __r=...) at /usr/include/c++/9/bits/shared_ptr_base.h:1265
#33 0x0000562b9951c92e in std::shared_ptr<scrimmage::Viewer>::operator= (this=0x7fff2bef3a30, __r=...) at /usr/include/c++/9/bits/shared_ptr.h:335
#34 0x0000562b99519941 in main (argc=2, argv=0x7fff2bef4408) at $HOME/scrimmage/share/scrimmage/main.cpp:220`
Note that frame 25 is the only part that uses a 3rd party library, and gdb reports:
(gdb) f
#25 0x00007f450cac133d in scrimmage::Viewer::~Viewer (this=0x562b996885d0, __in_chrg=<optimized out>) at $HOME/scrimmage/src/viewer/Viewer.cpp:50
50 Viewer::~Viewer() {
(gdb) info f
Stack level 25, frame at 0x7fff2bef38b0:
rip = 0x7f450cac133d in scrimmage::Viewer::~Viewer ($HOME/scrimmage/src/viewer/Viewer.cpp:50); saved rip = 0x562b995227ba
called by frame at 0x7fff2bef38d0, caller of frame at 0x7fff2bef3880
source language c++.
Arglist at 0x7fff2bef3878, args: this=0x562b996885d0, __in_chrg=<optimized out>
Locals at 0x7fff2bef3878, Previous frame's sp is 0x7fff2bef38b0
Saved registers:
rbx at 0x7fff2bef3890, rbp at 0x7fff2bef38a0, r12 at 0x7fff2bef3898, rip at 0x7fff2bef38a8
The source files of scrimmage can be found at:
https://github.com/gtri/scrimmage
Edited by Mathieu Westphal (Kitware)