MantisBT - VTK | |||||
| View Issue Details | |||||
| ID | Project | Category | View Status | Date Submitted | Last Update |
| 0008582 | VTK | (No Category) | public | 2009-02-23 07:49 | 2016-08-12 09:55 |
| Reporter | Joó Péter | ||||
| Assigned To | Kitware Robot | ||||
| Priority | normal | Severity | minor | Reproducibility | random |
| Status | closed | Resolution | moved | ||
| Platform | Linux | OS | Red Hat | OS Version | 4.0.2 |
| Product Version | |||||
| Target Version | Fixed in Version | ||||
| Project | |||||
| Type | |||||
| Summary | 0008582: CRASH: Invoking VolumeMapperComputeGradientsStartEvent and VolumeMapperComputeGradientsEndEvent evens are not thread safe | ||||
| Description | At file: vtkFixedPointVolumeRayCastMapper.cxx at method: void vtkFixedPointVolumeRayCastMapperComputeCS1CGradients(...) This method deliberately calls the me->InvokeEvent( vtkCommand::VolumeMapperComputeGradientsStartEvent, NULL ); me->InvokeEvent( vtkCommand::VolumeMapperComputeGradientsEndEvent, NULL ); methods to inform the application layer that the events VolumeMapperComputeGradientsStartEvent VolumeMapperComputeGradientsEndEvent are about to happen. However the vtkFixedPointVolumeRayCastMapperComputeCS1CGradients method is designed to be run on multiple threads/processor but it uses the vtkSubjectHelper::InvokeEvent method which is not thread safe. In our case VTK created 3 threads for gradient computation. During the computation and during the above InvokeEvent calls the vtkObjectBase::ReferenceCount member was compromised inside the our subclassed vtkCommand instance. This means that the reference count decreased to 0 and the vtkCommand deleted while there were still references for it. After a while the framework dereferenced that deleted class --> it lead to crash Solution: ========= VTK 5.2.0 as been patched in order to avoid the InvokeEvent from multiple threads. The patch consist of calling the InvokeEvent methods right before thread creation (vtkCommand::VolumeMapperComputeGradientsStartEvent) and right after the thread exit (vtkCommand::VolumeMapperComputeGradientsEndEvent) These takes place at file vtkFixedPointVolumeRayCastMapper.cxx at method vtkFixedPointVolumeRayCastMapper::ComputeGradients Note: ===== The other call for me->InvokeEvent( vtkCommand::VolumeMapperComputeGradientsProgressEvent, args ); has succeeded without such a problem because it was fired in case of: thread_id == 0 which was on purpose, I presume. | ||||
| Steps To Reproduce | reading the code is enough to prove that such a scenario exists in VTK 5.2.0 | ||||
| Additional Information | It was happened on a - HP xw8400 Workstation (4x3.0GHz Xeon CPU, 4GB RAM, 2x150MB image disk) - Linux version 2.6.15-2.5 (root@alfred) (gcc version 4.0.2 20051125 (Red Hat 4.0.2-8)) #1 SMP PREEMPT Tue Sep 19 10:56:25 CDT 2006 | ||||
| Tags | No tags attached. | ||||
| Relationships | |||||
| Attached Files | https://www.vtk.org/Bug/file/7072/original-vtkFixedPointVolumeRayCastMapper.cxx https://www.vtk.org/Bug/file/7073/patched-vtkFixedPointVolumeRayCastMapper.cxx | ||||
| Issue History | |||||
| Date Modified | Username | Field | Change | ||
| 2009-02-23 07:49 | Joó Péter | New Issue | |||
| 2009-02-23 07:58 | Joó Péter | Note Added: 0015288 | |||
| 2009-02-23 07:58 | Joó Péter | File Added: original-vtkFixedPointVolumeRayCastMapper.cxx | |||
| 2009-02-23 07:58 | Joó Péter | File Added: patched-vtkFixedPointVolumeRayCastMapper.cxx | |||
| 2009-02-23 07:59 | Joó Péter | Note Edited: 0015288 | |||
| 2011-06-16 13:11 | Zack Galbreath | Category | => (No Category) | ||
| 2016-08-12 09:55 | Kitware Robot | Note Added: 0037056 | |||
| 2016-08-12 09:55 | Kitware Robot | Status | expired => closed | ||
| 2016-08-12 09:55 | Kitware Robot | Resolution | open => moved | ||
| 2016-08-12 09:55 | Kitware Robot | Assigned To | => Kitware Robot | ||
| Notes | |||||
|
|
|||||
|
|
||||
|
|
|||||
|
|
||||