View Issue Details [ Jump to Notes ] | [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0015427 | VTK | (No Category) | public | 2015-04-17 02:46 | 2016-08-12 09:55 | ||||
Reporter | Arnaud Gelas | ||||||||
Assigned To | Kitware Robot | ||||||||
Priority | normal | Severity | minor | Reproducibility | have not tried | ||||
Status | closed | Resolution | moved | ||||||
Platform | OS | OS Version | |||||||
Product Version | 6.0.0 | ||||||||
Target Version | Fixed in Version | ||||||||
Summary | 0015427: VTK 6.2.0 Bug in vtkVRMLImporter, example crashes if there are more than one instance of vtkVRMLImporter | ||||||||
Description | Hi all, We have slightly modified the following wiki example: http://www.itk.org/Wiki/VTK/Examples/Cxx/IO/VRML [^] As follows: #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkVRMLImporter.h> #include <vtkDataSet.h> #include <vtkPolyData.h> #include <vtkSmartPointer.h> int main ( int argc, char *argv[]) { if(argc != 2) { std::cout << "Required arguments: Filename" << std::endl; return EXIT_FAILURE; } std::string filename = argv[1]; std::cout << "Reading " << filename << std::endl; vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor->SetRenderWindow(renderWindow); // VRML Import vtkSmartPointer<vtkVRMLImporter> importer = vtkSmartPointer<vtkVRMLImporter>::New(); importer->SetFileName ( filename.c_str() ); importer->SetRenderWindow(renderWindow); importer->Update(); renderWindow->Render(); renderWindowInteractor->Start(); vtkSmartPointer<vtkRenderer> renderer2 = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow2 = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow2->AddRenderer(renderer2); vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor2 = vtkSmartPointer<vtkRenderWindowInteractor>::New(); renderWindowInteractor2->SetRenderWindow(renderWindow2); // VRML Import vtkSmartPointer<vtkVRMLImporter> importer2 = vtkSmartPointer<vtkVRMLImporter>::New(); importer2->SetFileName ( filename.c_str() ); importer2->SetRenderWindow(renderWindow2); importer2->Update(); renderWindow2->Render(); renderWindowInteractor2->Start(); return EXIT_SUCCESS; } As you can see the modification is quite simple, we have just created 2 instances of every objects… This naive example crashes when exiting (trying to delete the second importer, i.e. importer2). Arnaud | ||||||||
Tags | No tags attached. | ||||||||
Project | TBD | ||||||||
Type | crash | ||||||||
Attached Files | |||||||||
Relationships | |
Relationships |
Notes | |
(0036310) Betsy McPhail (developer) 2016-07-06 16:57 |
This can be reproduced with a very simple example: int main(int argc, char *argv[]) { std::string filename = "bridge.wrl"; vtkSmartPointer<vtkVRMLImporter> importer = vtkSmartPointer<vtkVRMLImporter>::New(); importer->SetFileName(filename.c_str()); importer->Read(); vtkSmartPointer<vtkVRMLImporter> importer2 = vtkSmartPointer<vtkVRMLImporter>::New(); importer2->SetFileName(filename.c_str()); importer2->Read(); importer->Delete(); importer2->Delete(); return EXIT_SUCCESS; } |
(0036311) Betsy McPhail (developer) 2016-07-06 16:58 |
The 'TestVRMLImporter' test passes because the first importer is deleted before the second is created. |
(0036312) Betsy McPhail (developer) 2016-07-06 17:06 |
The problematic code is here: vtkVRMLImporter::~vtkVRMLImporter() { ... // According to Tom Citriniti the useList must not be deleted until the // instance is destroyed. The importer was crashing when users asked for a // DEF node from within the VRML file. This DEF mechanism allows you to // name a node inside the VRML file and refer to it from other nodes or // from scripts that can be associated with the VRML file. A vector of // these is created in the importer and has to live until the class is // deleted. delete this->Parser->useList; <--- This fails when the second importer is deleted this->Parser->useList = NULL; vtkVRMLAllocator::CleanUp(); <--- This removes the second importer's 'useList'... ... } Note: The other vtkVRMLVectorType objects (typeList and currentField) are deleted in ImportEnd(). |
(0037383) Kitware Robot (administrator) 2016-08-12 09:55 |
Resolving issue as `moved`. This issue tracker is no longer used. Further discussion of this issue may take place in the current VTK Issues page linked in the banner at the top of this page. |
Notes |
Issue History | |||
Date Modified | Username | Field | Change |
2015-04-17 02:46 | Arnaud Gelas | New Issue | |
2016-07-06 14:19 | Betsy McPhail | Assigned To | => Betsy McPhail |
2016-07-06 16:57 | Betsy McPhail | Note Added: 0036310 | |
2016-07-06 16:58 | Betsy McPhail | Note Added: 0036311 | |
2016-07-06 17:06 | Betsy McPhail | Note Added: 0036312 | |
2016-07-07 09:33 | Betsy McPhail | Assigned To | Betsy McPhail => |
2016-08-12 09:55 | Kitware Robot | Note Added: 0037383 | |
2016-08-12 09:55 | Kitware Robot | Status | backlog => closed |
2016-08-12 09:55 | Kitware Robot | Resolution | open => moved |
2016-08-12 09:55 | Kitware Robot | Assigned To | => Kitware Robot |
Issue History |
Copyright © 2000 - 2018 MantisBT Team |