Bug report #16402
regression: opening attribute table of a 4mb .OSM vector dataset freezes QGIS
Status: | Closed | ||
---|---|---|---|
Priority: | Severe/Regression | ||
Assignee: | - | ||
Category: | Attribute table | ||
Affected QGIS version: | master | Regression?: | No |
Operating System: | Easy fix?: | No | |
Pull Request or Patch supplied: | No | Resolution: | |
Crashes QGIS or corrupts data: | No | Copied to github as #: | 24311 |
Description
Under QGIS master, opening a (panel-mode) attribute table for a 4mb .OSM vector dataset freezes QGIS while eating CPU.
Steps to reproduce- Launch QGIS, and make sure the attribute table is set to open as a dockable panel (if not, switch that option on and restart)
- Create a new project, and add the attached test.osm dataset (choose the line geometry)
- Right-click on the layer and select "attribute table"
- Notice how QGIS freezes to death :)
For some reason, problem doesn't occur when attribute table opens as a window.
Associated revisions
History
#1 Updated by Mathieu Pellerin - nIRV over 7 years ago
More details coming in.
When QGIS goes into freeze mode, the console is flooded with the following messages (that repeats indefinitely):
src/gui/qgsmapcanvas.cpp: 476: (refresh) [110ms] CANVAS refresh already scheduled src/providers/ogr/qgsogrprovider.cpp: 3432: (open) [4ms] mFilePath: /home/webmaster/Desktop/test.osm src/providers/ogr/qgsogrprovider.cpp: 3433: (open) [0ms] mLayerIndex: 1 src/providers/ogr/qgsogrprovider.cpp: 3434: (open) [0ms] mLayerName: src/providers/ogr/qgsogrprovider.cpp: 3435: (open) [0ms] mSubsetString: src/providers/ogr/qgsogrprovider.cpp: 3488: (open) [12ms] OGR opened using Driver OSM src/providers/ogr/qgsogrprovider.cpp: 514: (setSubsetString) [0ms] checking validity src/providers/ogr/qgsogrprovider.cpp: 516: (setSubsetString) [0ms] Done checking validity src/gui/qgsmapcanvas.cpp: 476: (refresh) [115ms] CANVAS refresh already scheduled src/providers/ogr/qgsogrprovider.cpp: 3432: (open) [3ms] mFilePath: /home/webmaster/Desktop/test.osm src/providers/ogr/qgsogrprovider.cpp: 3433: (open) [0ms] mLayerIndex: 1 src/providers/ogr/qgsogrprovider.cpp: 3434: (open) [0ms] mLayerName: src/providers/ogr/qgsogrprovider.cpp: 3435: (open) [0ms] mSubsetString: src/providers/ogr/qgsogrprovider.cpp: 3488: (open) [13ms] OGR opened using Driver OSM src/providers/ogr/qgsogrprovider.cpp: 514: (setSubsetString) [0ms] checking validity src/providers/ogr/qgsogrprovider.cpp: 516: (setSubsetString) [0ms] Done checking validity src/gui/qgsmapcanvas.cpp: 476: (refresh) [115ms] CANVAS refresh already scheduled src/providers/ogr/qgsogrprovider.cpp: 3432: (open) [4ms] mFilePath: /home/webmaster/Desktop/test.osm src/providers/ogr/qgsogrprovider.cpp: 3433: (open) [0ms] mLayerIndex: 1 src/providers/ogr/qgsogrprovider.cpp: 3434: (open) [0ms] mLayerName: src/providers/ogr/qgsogrprovider.cpp: 3435: (open) [0ms] mSubsetString: src/providers/ogr/qgsogrprovider.cpp: 3488: (open) [13ms] OGR opened using Driver OSM src/providers/ogr/qgsogrprovider.cpp: 514: (setSubsetString) [0ms] checking validity src/providers/ogr/qgsogrprovider.cpp: 516: (setSubsetString) [0ms] Done checking validity src/gui/qgsmapcanvas.cpp: 476: (refresh) [114ms] CANVAS refresh already scheduled src/providers/ogr/qgsogrprovider.cpp: 3432: (open) [4ms] mFilePath: /home/webmaster/Desktop/test.osm src/providers/ogr/qgsogrprovider.cpp: 3433: (open) [0ms] mLayerIndex: 1 src/providers/ogr/qgsogrprovider.cpp: 3434: (open) [0ms] mLayerName: src/providers/ogr/qgsogrprovider.cpp: 3435: (open) [0ms] mSubsetString: src/providers/ogr/qgsogrprovider.cpp: 3488: (open) [12ms] OGR opened using Driver OSM src/providers/ogr/qgsogrprovider.cpp: 514: (setSubsetString) [0ms] checking validity src/providers/ogr/qgsogrprovider.cpp: 516: (setSubsetString) [0ms] Done checking validity
Here's the gdb where output, when QGIS is forzen:
#0 0x00007ffff33059a7 in __tzfile_read (file=file@entry=0x7ffff33d341b "/etc/localtime", extra=extra@entry=0, extrap=extrap@entry=0x0) at tzfile.c:124 #1 0x00007ffff3305481 in tzset_internal (explicit=1, always=1) at tzset.c:441 #2 0x00007ffff3305481 in __tzset () at tzset.c:589 #3 0x00007ffff3303b49 in __GI_mktime (tp=0x7fffffff3400) at mktime.c:588 #4 0x00007ffff3c9d899 in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #5 0x00007ffff3c9f0f1 in () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #6 0x00007ffff3ca1a02 in QDateTime::setMSecsSinceEpoch(long long) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #7 0x00007ffff3ca4881 in QDateTime::fromMSecsSinceEpoch(long long, Qt::TimeSpec, int) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #8 0x00007ffff3ca4bec in QDateTime::currentDateTime() () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #9 0x00007ffff3ca4ca1 in QTime::currentTime() () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #10 0x00007ffff3ca4d7d in QTime::elapsed() const () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #11 0x00007ffff59d0bb4 in QgsVectorLayerCache::setFullCache(bool) (this=0x55556242ff10, fullCache=true) at /home/webmaster/dev/cpp/QGIS/src/core/qgsvectorlayercache.cpp:107 #12 0x00007ffff66875d7 in QgsDualView::rebuildFullLayerCache() (this=0x555562451270) at /home/webmaster/dev/cpp/QGIS/src/gui/attributetable/qgsdualview.cpp:689 #13 0x00007ffff668d881 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QgsDualView::*)()>::call(void (QgsDualView::*)(), QgsDualView*, void**) (f=(void (QgsDualView::*)(QgsDualView * const)) 0x7ffff66874f2 <QgsDualView::rebuildFullLayerCache()>, o=0x555562451270, arg=0x7fffffff3990) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141 #14 0x00007ffff668d2a3 in QtPrivate::FunctionPointer<void (QgsDualView::*)()>::call<QtPrivate::List<>, void>(void (QgsDualView::*)(), QgsDualView*, void**) (f=(void (QgsDualView::*)(QgsDualView * const)) 0x7ffff66874f2 <QgsDualView::rebuildFullLayerCache()>, o=0x555562451270, arg=0x7fffffff3990) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160 #15 0x00007ffff668c545 in QtPrivate::QSlotObject<void (QgsDualView::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555624aa3e0, r=0x555562451270, a=0x7fffffff3990, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120 #16 0x00007ffff3e5781e in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #17 0x00007ffff5cbc6d7 in QgsVectorLayerCache::invalidated() (this=0x55556242ff10) at /home/webmaster/dev/cpp/QGIS/bm-qt5/src/core/moc_qgsvectorlayercache.cpp:264 #18 0x00007ffff59d1702 in QgsVectorLayerCache::invalidate() (this=0x55556242ff10) at /home/webmaster/dev/cpp/QGIS/src/core/qgsvectorlayercache.cpp:277 #19 0x00007ffff59d3e64 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QgsVectorLayerCache::*)()>::call(void (QgsVectorLayerCache::*)(), QgsVectorLayerCache*, void**) (f=(void (QgsVectorLayerCache::*)(QgsVectorLayerCache * const)) 0x7ffff59d16d2 <QgsVectorLayerCache::invalidate()>, o=0x55556242ff10, arg=0x7fffffff3b90) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141 #20 0x00007ffff59d3c0e in QtPrivate::FunctionPointer<void (QgsVectorLayerCache::*)()>::call<QtPrivate::List<>, void>(void (QgsVectorLayerCache::*)(), QgsVectorLayerCache*, void**) (f=(void (QgsVectorLayerCache::*)(QgsVectorLayerCache * const)) 0x7ffff59d16d2 <QgsVectorLayerCache::invalidate()>, o=0x55556242ff10, arg=0x7fffffff3b90) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160 #21 0x00007ffff59d372f in QtPrivate::QSlotObject<void (QgsVectorLayerCache::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555624aa4d0, r=0x55556242ff10, a=0x7fffffff3b90, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120 #22 0x00007ffff3e5781e in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #23 0x00007ffff5cb14e5 in QgsMapLayer::dataChanged() (this=0x55555f6fbff0) at /home/webmaster/dev/cpp/QGIS/bm-qt5/src/core/moc_qgsmaplayer.cpp:426 #24 0x00007ffff57eb63a in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QgsMapLayer::*)()>::call(void (QgsMapLayer::*)(), QgsMapLayer*, void**) (f=(void (QgsMapLayer::*)(QgsMapLayer * const)) 0x7ffff5cb14bc <QgsMapLayer::dataChanged()>, o=0x55555f6fbff0, arg=0x7fffffff3d70) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141 #25 0x00007ffff57eb336 in QtPrivate::FunctionPointer<void (QgsMapLayer::*)()>::call<QtPrivate::List<>, void>(void (QgsMapLayer::*)(), QgsMapLayer*, void**) (f=(void (QgsMapLayer::*)(QgsMapLayer * const)) 0x7ffff5cb14bc <QgsMapLayer::dataChanged()>, o=0x55555f6fbff0, arg=0x7fffffff3d70) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160 #26 0x00007ffff57eab5f in QtPrivate::QSlotObject<void (QgsMapLayer::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x5555620e7120, r=0x55555f6fbff0, a=0x7fffffff3d70, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120 #27 0x00007ffff3e5781e in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #28 0x00007ffff5caea7b in QgsDataProvider::dataChanged() (this=0x55555f700de0) at /home/webmaster/dev/cpp/QGIS/bm-qt5/src/core/moc_qgsdataprovider.cpp:161 #29 0x00007fff3b24e0f5 in QgsOgrProvider::setSubsetString(QString const&, bool) (this=0x55555f700de0, theSQL=..., updateFeatureCount=true) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:520 #30 0x00007fff3b268149 in QgsOgrProvider::open(QgsOgrProvider::OpenMode) (this=0x55555f700de0, mode=QgsOgrProvider::OpenModeSameAsCurrent) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:3509 #31 0x00007fff3b268f76 in QgsOgrProvider::reloadData() (this=0x55555f700de0) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:3623 #32 0x00007ffff59a342d in QgsVectorLayer::reload() (this=0x55555f6fbff0) at /home/webmaster/dev/cpp/QGIS/src/core/qgsvectorlayer.cpp:240 #33 0x00007ffff68b5982 in QgsMapCanvas::refreshAllLayers() (this=0x55555645a0a0) at /home/webmaster/dev/cpp/QGIS/src/gui/qgsmapcanvas.cpp:2076 #34 0x00007ffff71b4658 in QgisApp::refreshMapCanvas() (this=0x555555c9c800) at /home/webmaster/dev/cpp/QGIS/src/app/qgisapp.cpp:8145 #35 0x00007ffff7234cc5 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QgisApp::*)()>::call(void (QgisApp::*)(), QgisApp*, void**) (f=(void (QgisApp::*)(QgisApp * const)) 0x7ffff71b459e <QgisApp::refreshMapCanvas()>, o=0x555555c9c800, arg=0x7fffffff43b0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:141 #36 0x00007ffff722ff15 in QtPrivate::FunctionPointer<void (QgisApp::*)()>::call<QtPrivate::List<>, void>(void (QgisApp::*)(), QgisApp*, void**) (f=(void (QgisApp::*)(QgisApp * const)) 0x7ffff71b459e <QgisApp::refreshMapCanvas()>, o=0x555555c9c800, arg=0x7fffffff43b0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:160 #37 0x00007ffff7226a99 in QtPrivate::QSlotObject<void (QgisApp::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x55556261da50, r=0x555555c9c800, a=0x7fffffff43b0, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject_impl.h:120 #38 0x00007ffff3e5781e in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #39 0x00007ffff5caea7b in QgsDataProvider::dataChanged() (this=0x55555f700de0) at /home/webmaster/dev/cpp/QGIS/bm-qt5/src/core/moc_qgsdataprovider.cpp:161 #40 0x00007fff3b24e0f5 in QgsOgrProvider::setSubsetString(QString const&, bool) (this=0x55555f700de0, theSQL=..., updateFeatureCount=true) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:520 #41 0x00007fff3b268149 in QgsOgrProvider::open(QgsOgrProvider::OpenMode) (this=0x55555f700de0, mode=QgsOgrProvider::OpenModeSameAsCurrent) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:3509 #42 0x00007fff3b268f76 in QgsOgrProvider::reloadData() (this=0x55555f700de0) at /home/webmaster/dev/cpp/QGIS/src/providers/ogr/qgsogrprovider.cpp:3623 #43 0x00007ffff59a342d in QgsVectorLayer::reload() (this=0x55555f6fbff0) at /home/webmaster/dev/cpp/QGIS/src/core/qgsvectorlayer.cpp:240 #44 0x00007ffff68b5982 in QgsMapCanvas::refreshAllLayers() (this=0x55555645a0a0) at /home/webmaster/dev/cpp/QGIS/src/gui/qgsmapcanvas.cpp:2076
#2 Updated by Mathieu Pellerin - nIRV over 7 years ago
- Status changed from Open to Closed
Fixed in changeset 25d9936df8ab920519e0f44f01c7a7bf457b7601.