[Paraview-developers] ParaView 3.14.1 crashes when loading a state file with existing data sources in pipeline

Cory Quammen cquammen at cs.unc.edu
Thu Apr 19 15:36:18 EDT 2012


Hi all,

In ParaView 3.12, I could define a pipeline and then open a state
file. The sources and filters defined in the state file would then be
added to the existing pipeline.

In ParaView 3.14.1, I get a crash when I try to do this. Here are the
steps to reproduce it:

1). Run ParaView
2). Save a state file (nothing in the pipeline)
3). Add a source (I've tried Text source and Sphere source)
4). Load the state file in step 2
5). Crash

If I load the blank state file with nothing in the pipeline, there is no crash.

I compiled a debug version of ParaView 3.14.1 and ran it through
valgrind, following the steps above. The valgrind output indicates
that there are invalid reads of deleted objects

9941== Invalid read of size 8
==19941==    at 0x1029FED1: QMetaObject::cast(QObject*) const (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0)
==19941==    by 0x50BFC2C: pqView* qobject_cast<pqView*>(QObject*)
(qobject.h:380)
==19941==    by 0x5A25AD1:
pqApplicationCore::loadState(vtkPVXMLElement*, pqServer*)
(pqApplicationCore.cxx:534)
==19941==    by 0x4C9ABBD: pqLoadStateReaction::loadState(QString
const&) (pqLoadStateReaction.cxx:79)
==19941==    by 0x4C9AF08: pqLoadStateReaction::loadState()
(pqLoadStateReaction.cxx:110)
==19941==    by 0x4CCE6BE: pqLoadStateReaction::onTriggered()
(pqLoadStateReaction.h:61)
==19941==    by 0x4CD0549: pqReaction::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**) (moc_pqReaction.cxx:52)
==19941==    by 0x102B06A5: QMetaObject::activate(QObject*,
QMetaObject const*, int, void**) (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0)
==19941==    by 0xECDFF31: QAction::triggered(bool) (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so.4.8.0)
==19941==    by 0xECE16AA: QAction::activate(QAction::ActionEvent) (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so.4.8.0)
==19941==    by 0xF15DDA0: ??? (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so.4.8.0)
==19941==    by 0xF163829: ??? (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtGui.so.4.8.0)
==19941==  Address 0x2a7bfd00 is 0 bytes inside a block of size 80 free'd
==19941==    at 0x4A0545F: operator delete(void*) (vg_replace_malloc.c:387)
==19941==    by 0x5ADB311:
pqTextRepresentation::~pqTextRepresentation()
(pqTextRepresentation.cxx:51)
==19941==    by 0x5ABFF7C:
pqServerManagerModel::onProxyUnRegistered(QString const&, QString
const&, vtkSMProxy*) (pqServerManagerModel.cxx:452)
==19941==    by 0x5AF07D5:
pqServerManagerModel::qt_static_metacall(QObject*, QMetaObject::Call,
int, void**) (moc_pqServerManagerModel.cxx:158)
==19941==    by 0x102B06A5: QMetaObject::activate(QObject*,
QMetaObject const*, int, void**) (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0)
==19941==    by 0x5AF1D04:
pqServerManagerObserver::proxyUnRegistered(QString const&, QString
const&, vtkSMProxy*) (moc_pqServerManagerObserver.cxx:164)
==19941==    by 0x5AC3A33:
pqServerManagerObserver::proxyUnRegistered(vtkObject*, unsigned long,
void*, void*, vtkCommand*) (pqServerManagerObserver.cxx:184)
==19941==    by 0x5AF192C:
pqServerManagerObserver::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**) (moc_pqServerManagerObserver.cxx:90)
==19941==    by 0x102B06A5: QMetaObject::activate(QObject*,
QMetaObject const*, int, void**) (in
/playpen2/cquammen/dev/packages/QtSDK/Desktop/Qt/4.8.0/gcc/lib/libQtCore.so.4.8.0)
==19941==    by 0xCE4D51C: vtkQtConnection::EmitExecute(vtkObject*,
unsigned long, void*, void*, vtkCommand*)
(moc_vtkQtConnection.cxx:104)
==19941==    by 0xCE19E52: vtkQtConnection::Execute(vtkObject*,
unsigned long, void*) (vtkQtConnection.cxx:72)
==19941==    by 0xCE19DDD: vtkQtConnection::DoCallback(vtkObject*,
unsigned long, void*, void*) (vtkQtConnection.cxx:62)

It looks like pqApplicationCore::loadState() is attempting to read a
proxy that has been free'd in
pqServerManagerModel::onProxyUnRegistered().

Could someone who know more about the proxy management take a look at
this? We have a branded ParaView application that inserts a text
source in the pipeline at start up, which means that no one can load
state files without deleting the text source first.

Thanks,
Cory

-- 
Cory Quammen
Research Associate
Department of Computer Science
The University of North Carolina at Chapel Hill


More information about the Paraview-developers mailing list