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 8 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 8 years ago
- Status changed from Open to Closed
Fixed in changeset 25d9936df8ab920519e0f44f01c7a7bf457b7601.