Bug report #8095

Topology checker crashes qgis when clicking on "new project" or when readding a previously checked vector

Added by Pedro Venâncio over 6 years ago. Updated about 6 years ago.

Status:Closed
Priority:Severe/Regression
Assignee:vinayan Parameswaran
Category:C++ Plugins
Affected QGIS version:master Regression?:No
Operating System: Easy fix?:No
Pull Request or Patch supplied:No Resolution:fixed
Crashes QGIS or corrupts data:Yes Copied to github as #:16932

Description

Hi,

The topological errors found by the topology checker and identified in red does not disappear, even after doing "Project -> New". It is necessary to "Validate all" again in the new project (without having added any rule) or, alternatively, close and reopen QGIS.

Thanks a lot for this great plugin!

Associated revisions

Revision 3d7b802d
Added by vinayan Parameswaran over 6 years ago

Merge pull request #664 from vinayan/topofix

[Fix #8095] - fix topology error markers

Revision ce1a9a82
Added by Matthias Kuhn about 6 years ago

Topology checker: No double-delete of rubberbands (Fix #8095)

History

#1 Updated by vinayan Parameswaran over 6 years ago

  • Status changed from Open to Closed

#2 Updated by Pedro Venâncio over 6 years ago

  • Status changed from Closed to Reopened

Hi Vinayan,

Thank you for the quick fix! But now two different things occurs:

1) If you click on some of the errors in the list, when you make "New project", the last error that was clicked, do not disappear. All other disappear as expected.

2) More serious, clicking again in "New project", crashes QGIS:

Debug: performing cascaded union..might take time..- 
Fatal: QGIS died on signal 11
Stacktrace (piped through c++filt):
/usr/bin/qgis.bin(myMessageOutput(QtMsgType, char const*)+0x136)[0x810d856]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qt_message_output(QtMsgType, char const*)+0x39)[0x64b519]
/usr/lib/i386-linux-gnu/libQtCore.so.4(+0x5ca4b)[0x64ba4b]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qFatal(char const*, ...)+0x18)[0x64bb68]
/usr/bin/qgis.bin(qgisCrash(int)+0x17)[0x810d637]
[0x943400]
/usr/lib/libqgis_gui.so.1.9.0(QList<QList<QgsPoint> >::clear()+0x3e)[0x2ac8c5e]
/usr/lib/libqgis_gui.so.1.9.0(QgsRubberBand::reset(QGis::GeometryType)+0x25)[0x2ac6e25]
/usr/lib/qgis/plugins/libtopolplugin.so(checkDock::deleteErrors()+0xba)[0xb234526a]
/usr/lib/qgis/plugins/libtopolplugin.so(+0x32148)[0xb235f148]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x7826b1]
/usr/lib/libqgis_gui.so.1.9.0(QgisInterface::newProjectCreated()+0x35)[0x2af8825]
/usr/lib/libqgis_gui.so.1.9.0(+0x24d994)[0x2af8994]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x7826b1]
/usr/bin/qgis.bin(QgisApp::newProject()+0x27)[0x8429387]
/usr/bin/qgis.bin(QgisApp::fileNew(bool, bool)+0x96d)[0x814378d]
/usr/bin/qgis.bin(QgisApp::fileNew()+0x1f)[0x814486f]
/usr/bin/qgis.bin[0x842a82d]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x7826b1]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAction::triggered(bool)+0x4d)[0x67389bd]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAction::activate(QAction::ActionEvent)+0x8b)[0x6738c5b]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::nextCheckState()+0x30)[0x6c45410]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x567c57)[0x6b6cc57]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::mouseReleaseEvent(QMouseEvent*)+0xa6)[0x6b6cf56]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::mouseReleaseEvent(QMouseEvent*)+0x2d)[0x6c454ad]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QWidget::event(QEvent*)+0x40c)[0x679a1ac]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::event(QEvent*)+0x69)[0x6b6c1f9]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::event(QEvent*)+0x4c)[0x6c46bdc]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::notify_helper(QObject*, QEvent*)+0xc4)[0x673fed4]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::notify(QObject*, QEvent*)+0xea4)[0x6746024]
/usr/lib/libqgis_core.so.1.9.0(QgsApplication::notify(QObject*, QEvent*)+0x81)[0x27df81]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::notifyInternal(QObject*, QEvent*)+0x8e)[0x76b97e]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool)+0x115)[0x6740e95]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1c8074)[0x67cd074]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::x11ProcessEvent(_XEvent*)+0xb8d)[0x67cbc0d]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3eac)[0x67f8eac]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x146)[0x4c64d86]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x47125)[0x4c65125]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x41)[0x4c65201]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x67)[0x79e887]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3aaa)[0x67f8aaa]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x4d)[0x76a50d]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)+0xf9)[0x76a7a9]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::exec()+0x9a)[0x76feba]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::exec()+0x24)[0x673da74]
/usr/bin/qgis.bin(main+0x22fd)[0x81094ad]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x44f44d3]
/usr/bin/qgis.bin[0x810d581]
Abortado (core dumped)

Please see the screencast: http://goo.gl/7Q393

In this video I am using a layer that Giovanni put in another ticket, but I've tested it with several other layers (including polygons and polylines in shapefiles and PostGIS layers).

I think we can consider it as a "Blocker" at this moment.

#3 Updated by vinayan Parameswaran over 6 years ago

  • Priority changed from Normal to Severe/Regression

#4 Updated by vinayan Parameswaran over 6 years ago

Hi Pedro,
Thanks for reporting..it is hopefully a simple fix. Are you sure the stack-trace posted is based on crash when opening new project? it seems to me that it was created when running 'must not have gaps' on the layer the Giovanni tested as reported in another bug..

#5 Updated by Pedro Venâncio over 6 years ago

Hi Vinayan,

No, in the previous screencast it is not visible, but see this: http://goo.gl/f3a7J

-> New project crash

[email protected]:~$ qgis
Warning: loading of qt translation failed [/usr/share/qt4/translations/qt_en_US]
Debug: "layerid = ruas20130619082857165" 
Debug: 559 
Fatal: QGIS died on signal 11
Stacktrace (piped through c++filt):
/usr/bin/qgis.bin(myMessageOutput(QtMsgType, char const*)+0x136)[0x810d856]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qt_message_output(QtMsgType, char const*)+0x39)[0x2acf519]
/usr/lib/i386-linux-gnu/libQtCore.so.4(+0x5ca4b)[0x2acfa4b]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qFatal(char const*, ...)+0x18)[0x2acfb68]
/usr/bin/qgis.bin(qgisCrash(int)+0x17)[0x810d637]
[0x913400]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QGraphicsItem::prepareGeometryChange()+0x37)[0x3503bc7]
/usr/lib/libqgis_gui.so.1.9.0(QgsMapCanvasItem::setRect(QgsRectangle const&)+0x16b)[0x40e71b]
/usr/lib/libqgis_gui.so.1.9.0(QgsRubberBand::updateRect()+0x229)[0x468ef9]
/usr/lib/libqgis_gui.so.1.9.0(QgsRubberBand::reset(QGis::GeometryType)+0x34)[0x469e34]
/usr/lib/qgis/plugins/libtopolplugin.so(checkDock::deleteErrors()+0xba)[0xb22ef26a]
/usr/lib/qgis/plugins/libtopolplugin.so(+0x32148)[0xb2309148]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x2c066b1]
/usr/lib/libqgis_gui.so.1.9.0(QgisInterface::newProjectCreated()+0x35)[0x49b825]
/usr/lib/libqgis_gui.so.1.9.0(+0x24d994)[0x49b994]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x2c066b1]
/usr/bin/qgis.bin(QgisApp::newProject()+0x27)[0x8429387]
/usr/bin/qgis.bin(QgisApp::fileNew(bool, bool)+0x96d)[0x814378d]
/usr/bin/qgis.bin(QgisApp::fileNew()+0x1f)[0x814486f]
/usr/bin/qgis.bin[0x842a82d]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x2c066b1]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAction::triggered(bool)+0x4d)[0x2e839bd]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAction::activate(QAction::ActionEvent)+0x8b)[0x2e83c5b]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::nextCheckState()+0x30)[0x3390410]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x567c57)[0x32b7c57]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::mouseReleaseEvent(QMouseEvent*)+0xa6)[0x32b7f56]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::mouseReleaseEvent(QMouseEvent*)+0x2d)[0x33904ad]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QWidget::event(QEvent*)+0x40c)[0x2ee51ac]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::event(QEvent*)+0x69)[0x32b71f9]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QToolButton::event(QEvent*)+0x4c)[0x3391bdc]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::notify_helper(QObject*, QEvent*)+0xc4)[0x2e8aed4]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::notify(QObject*, QEvent*)+0xea4)[0x2e91024]
/usr/lib/libqgis_core.so.1.9.0(QgsApplication::notify(QObject*, QEvent*)+0x81)[0x2701f81]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::notifyInternal(QObject*, QEvent*)+0x8e)[0x2bef97e]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool)+0x115)[0x2e8be95]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1c8074)[0x2f18074]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::x11ProcessEvent(_XEvent*)+0xb8d)[0x2f16c0d]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3eac)[0x2f43eac]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x146)[0x4fadd86]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x47125)[0x4fae125]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x41)[0x4fae201]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x67)[0x2c22887]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3aaa)[0x2f43aaa]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x4d)[0x2bee50d]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)+0xf9)[0x2bee7a9]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::exec()+0x9a)[0x2bf3eba]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::exec()+0x24)[0x2e88a74]
/usr/bin/qgis.bin(main+0x22fd)[0x81094ad]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x498e4d3]
/usr/bin/qgis.bin[0x810d581]
Abortado (core dumped)

-> Run Topopogy Checker again crash

[email protected]:~$ qgis
Warning: loading of qt translation failed [/usr/share/qt4/translations/qt_en_US]
Debug: "layerid = ruas20130619082941294" 
Debug: 559 
Debug: "layerid = ruas20130619083003196" 
Fatal: QGIS died on signal 11
Stacktrace (piped through c++filt):
/usr/bin/qgis.bin(myMessageOutput(QtMsgType, char const*)+0x136)[0x810d856]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qt_message_output(QtMsgType, char const*)+0x39)[0x84a519]
/usr/lib/i386-linux-gnu/libQtCore.so.4(+0x5ca4b)[0x84aa4b]
/usr/lib/i386-linux-gnu/libQtCore.so.4(qFatal(char const*, ...)+0x18)[0x84ab68]
/usr/bin/qgis.bin(qgisCrash(int)+0x17)[0x810d637]
[0xb74400]
/usr/lib/libqgis_gui.so.1.9.0(QList<QList<QgsPoint> >::clear()+0x3e)[0x29a8c5e]
/usr/lib/libqgis_gui.so.1.9.0(QgsRubberBand::reset(QGis::GeometryType)+0x25)[0x29a6e25]
/usr/lib/qgis/plugins/libtopolplugin.so(checkDock::validate(ValidateType)+0x63)[0xb1ce81d3]
/usr/lib/qgis/plugins/libtopolplugin.so(checkDock::validateAll()+0x23)[0xb1ce83c3]
/usr/lib/qgis/plugins/libtopolplugin.so(+0x321a0)[0xb1d011a0]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QMetaObject::activate(QObject*, QMetaObject const*, int, void**)+0x241)[0x9816b1]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::clicked(bool)+0x4d)[0x3ff897d]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x56662d)[0x3cec62d]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x567c9b)[0x3cedc9b]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::mouseReleaseEvent(QMouseEvent*)+0xa6)[0x3cedf56]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QWidget::event(QEvent*)+0x40c)[0x391b1ac]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QAbstractButton::event(QEvent*)+0x69)[0x3ced1f9]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QPushButton::event(QEvent*)+0x48)[0x3d90768]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::notify_helper(QObject*, QEvent*)+0xc4)[0x38c0ed4]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::notify(QObject*, QEvent*)+0xea4)[0x38c7024]
/usr/lib/libqgis_core.so.1.9.0(QgsApplication::notify(QObject*, QEvent*)+0x81)[0x47cf81]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::notifyInternal(QObject*, QEvent*)+0x8e)[0x96a97e]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool)+0x115)[0x38c1e95]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1c8074)[0x394e074]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::x11ProcessEvent(_XEvent*)+0xb8d)[0x394cc0d]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3eac)[0x3979eac]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x146)[0x5256d86]
/lib/i386-linux-gnu/libglib-2.0.so.0(+0x47125)[0x5257125]
/lib/i386-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x41)[0x5257201]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x67)[0x99d887]
/usr/lib/i386-linux-gnu/libQtGui.so.4(+0x1f3aaa)[0x3979aaa]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)+0x4d)[0x96950d]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)+0xf9)[0x9697a9]
/usr/lib/i386-linux-gnu/libQtCore.so.4(QCoreApplication::exec()+0x9a)[0x96eeba]
/usr/lib/i386-linux-gnu/libQtGui.so.4(QApplication::exec()+0x24)[0x38bea74]
/usr/bin/qgis.bin(main+0x22fd)[0x81094ad]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x2b084d3]
/usr/bin/qgis.bin[0x810d581]
Abortado (core dumped)

Best regards!

#6 Updated by Giovanni Manghi about 6 years ago

  • Crashes QGIS or corrupts data changed from No to Yes
  • Subject changed from Topology checker red markers to Topology checker crashes qgis

1) If you click on some of the errors in the list, when you make "New project", the last error that was clicked, do not disappear. All other disappear as expected.

I cannot confirm this, but I can confirm a similar issue. If after clicking on "new project" I add again the layer I checked before, then the last selected feature/error is immediately identified in red. Is this on purpose?

2) More serious, clicking again in "New project", crashes QGIS:

confirmed, and it happens also if re-adding the previously checked vector, and clicking again "validate all".

#7 Updated by Salvatore Larosa about 6 years ago

is this a duplicate of #7845 ?

#8 Updated by Giovanni Manghi about 6 years ago

  • Subject changed from Topology checker crashes qgis to Topology checker crashes qgis when clicking on "new project" or when readding a previously checked vector

#9 Updated by Giovanni Manghi about 6 years ago

Salvatore Larosa wrote:

is this a duplicate of #7845 ?

no, are separate issues, I changed the titles now.

#10 Updated by Matthias Kuhn about 6 years ago

  • Status changed from Reopened to Closed

Fixed in changeset ce1a9a821db2c494cfbd6ed12a658a47d4c587e3.

Please verify, the fix was implemented based on the backtrace, without testing.

#11 Updated by Pedro Venâncio about 6 years ago

Matthias Kuhn wrote:

Fixed in changeset ce1a9a821db2c494cfbd6ed12a658a47d4c587e3.

Please verify, the fix was implemented based on the backtrace, without testing.

Hi Matthias,

I confirm, the crash is solved! Thank you very much!

I still have these problems:

Pedro Venâncio wrote:

1) If you click on some of the errors in the list, when you make "New project", the last error that was clicked, do not disappear. All other disappear as expected.

Giovanni Manghi wrote:

I cannot confirm this, but I can confirm a similar issue. If after clicking on "new project" I add again the layer I checked before, then the last selected feature/error is immediately identified in red. Is this on purpose?

Anyone confirm? Giovanni? It will be better to open a new ticket and keep this one just for the crash that Matthias solved?

Thanks!

#12 Updated by Giovanni Manghi about 6 years ago

  • Resolution set to fixed

Pedro Venâncio wrote:

1) If you click on some of the errors in the list, when you make "New project", the last error that was clicked, do not disappear. All other disappear as expected.

I still cannot confirm this

Giovanni Manghi wrote:

I cannot confirm this, but I can confirm a similar issue. If after clicking on "new project" I add again the layer I checked before, then the last selected feature/error is immediately identified in red. Is this on purpose?

this is fixed.

It will be better to open a new ticket and keep this one just for the crash that Matthias solved?

better file a new ticket.

cheers!

Also available in: Atom PDF