vtkContextView::SetScene causes segmentation fault under some circumstances
It does seem like vtkContextView::SetScene
should use vtkCxxSetSmartPointerMacro
instead of vtkCxxSetObjectMacro
because the Scene
member is declared as a smart pointer.
The bug can be reproduced easily in C++ by attaching the scene to a view and deleting the view later, however you can also reproduce in python easily.
$ ./bin/vtkpython
>>> import vtk
>>> vtk.vtkLogger.Init()
>>> vtk.vtkLogger.SetStderrVerbosity(vtk.vtkLogger.VERBOSITY_MAX)
>>> view = vtk.vtkContextView()
>>> scene = vtk.vtkContextScene()
>>> view.SetScene(scene)
>>> exit()
=========================================================
Process id 305981 Caught SIGSEGV at 0xe0 address not mapped to object
Program Stack:
0x7fa5752af090 : ??? [(???) ???:-1]
0x7fa569cdedd6 : vtkContextScene::ReleaseGraphicsResources() [(libvtkRenderingContext2D-9.3.so.1) ???:-1]
0x7fa56320a549 : vtkOpenGLContextActor::ReleaseGraphicsResources(vtkWindow*) [(libvtkRenderingContextOpenGL2-9.3.so.1) ???:-1]
0x7fa56e314fe4 : vtkRenderer::ReleaseGraphicsResources(vtkWindow*) [(libvtkRenderingCore-9.3.so.1) ???:-1]
0x7fa5657d06f3 : vtkOpenGLRenderer::ReleaseGraphicsResources(vtkWindow*) [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa5657bf36e : vtkOpenGLRenderWindow::ReleaseGraphicsResources(vtkWindow*) [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa5658dc652 : vtkXOpenGLRenderWindow::DestroyWindow() [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa5658dc82f : vtkXOpenGLRenderWindow::Finalize() [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa5658d9881 : vtkXOpenGLRenderWindow::~vtkXOpenGLRenderWindow() [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa5658d9968 : vtkXOpenGLRenderWindow::~vtkXOpenGLRenderWindow() [(libvtkRenderingOpenGL2-9.3.so.1) ???:-1]
0x7fa573c9f609 : vtkObjectBase::UnRegisterInternal(vtkObjectBase*, int) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa573c9d183 : vtkObject::UnRegisterInternal(vtkObjectBase*, int) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa573c9f4a7 : vtkObjectBase::UnRegister(vtkObjectBase*) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa56e2f1b91 : vtkRenderWindow::UnRegister(vtkObjectBase*) [(libvtkRenderingCore-9.3.so.1) ???:-1]
0x7fa56e2fd7e9 : vtkRenderWindowInteractor::SetRenderWindow(vtkRenderWindow*) [(libvtkRenderingCore-9.3.so.1) ???:-1]
0x7fa56e2f1b60 : vtkRenderWindow::UnRegister(vtkObjectBase*) [(libvtkRenderingCore-9.3.so.1) ???:-1]
0x7fa573d28999 : vtkSmartPointerBase::~vtkSmartPointerBase() [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa564a102e2 : ??? [(???) ???:-1]
0x7fa564a0ede8 : vtkRenderViewBase::~vtkRenderViewBase() [(libvtkViewsCore-9.3.so.1) ???:-1]
0x7fa5634241c8 : vtkContextView::~vtkContextView() [(libvtkViewsContext2D-9.3.so.1) ???:-1]
0x7fa5634241e8 : vtkContextView::~vtkContextView() [(libvtkViewsContext2D-9.3.so.1) ???:-1]
0x7fa573c9f609 : vtkObjectBase::UnRegisterInternal(vtkObjectBase*, int) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa573c9d183 : vtkObject::UnRegisterInternal(vtkObjectBase*, int) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa573c9f4a7 : vtkObjectBase::UnRegister(vtkObjectBase*) [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa573c9f12a : vtkObjectBase::Delete() [(libvtkCommonCore-9.3.so.1) ???:-1]
0x7fa575203207 : ??? [(???) ???:-1]
0x7fa575203a5e : vtkPythonUtil::RemoveObjectFromMap(_object*) [(libvtkWrappingPythonCore3.8-9.3.so.1) ???:-1]
0x7fa5751e6585 : PyVTKObject_Delete [(libvtkWrappingPythonCore3.8-9.3.so.1) ???:-1]
0x7fa574ed6165 : ??? [(???) ???:-1]
0x7fa574ed6818 : ??? [(???) ???:-1]
0x7fa574ec2665 : ??? [(???) ???:-1]
0x7fa574ce800a : ??? [(???) ???:-1]
0x7fa574dcc89d : _PyGC_CollectNoFail [(libpython3.8.so.1.0) ???:-1]
0x7fa574e0e14c : PyImport_Cleanup [(libpython3.8.so.1.0) ???:-1]
0x7fa574df9610 : Py_FinalizeEx [(libpython3.8.so.1.0) ???:-1]
0x7fa574dd429d : Py_RunMain [(libpython3.8.so.1.0) ???:-1]
0x7fa5752520da : vtkPythonInterpreter::PyMain(int, char**) [(libvtkPythonInterpreter-9.3.so.1) ???:-1]
0x5566a952e4cf : ??? [(???) ???:-1]
0x7fa575290083 : __libc_start_main [(libc.so.6) ???:-1]
0x5566a952e26e : ??? [(???) ???:-1]
=========================================================
Aborted (core dumped)
Edited by Jaswant Panchumarti (Kitware)