- Introduce an approximate feature count for GeoPackage in case there are
at least 100,000 rows in a table.
- Add a super fast implementation of GetExtent() for GeoPackage when there
is an RTree
- Do not require feature count when enumerating layers from the browser
This function was introduced at a time where some GDAL versions didn't have
VSIReadDirRecursive(). Since we now require GDAL 2.1, this is safe to use
plain VSIReadDirRecursive1()
This fixes the following warning
==23284== Invalid read of size 4
==23284== at 0x14911DE5: pj_ctx_get_errno (pj_ctx.c:137)
==23284== by 0x149104A9: pj_free (pj_malloc.c:188)
==23284== by 0x88C4DD3: QgsCoordinateTransformPrivate::freeProj() (qgscoordinatetransform_p.cpp:336)
==23284== by 0x88C29AB: QgsCoordinateTransformPrivate::~QgsCoordinateTransformPrivate() (qgscoordinatetransform_p.cpp:88)
==23284== by 0x88BEA6E: QExplicitlySharedDataPointer<QgsCoordinateTransformPrivate>::~QExplicitlySharedDataPointer() (qshareddata.h:156)
==23284== by 0x88B7857: QgsCoordinateTransform::~QgsCoordinateTransform() (qgscoordinatetransform.cpp:139)
==23284== by 0x88C1827: QHashNode<QPair<QString, QString>, QgsCoordinateTransform>::~QHashNode() (qhash.h:237)
==23284== by 0x88C18A6: QHash<QPair<QString, QString>, QgsCoordinateTransform>::deleteNode2(QHashData::Node*) (qhash.h:585)
==23284== by 0xB9CBBF8: QHashData::free_helper(void (*)(QHashData::Node*)) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.5.1)
==23284== by 0x88C0276: QHash<QPair<QString, QString>, QgsCoordinateTransform>::freeData(QHashData*) (qhash.h:621)
==23284== by 0x88BF735: QHash<QPair<QString, QString>, QgsCoordinateTransform>::~QHash() (qhash.h:342)
==23284== by 0x88C1F2B: QMultiHash<QPair<QString, QString>, QgsCoordinateTransform>::~QMultiHash() (qhash.h:994)
==23284== by 0xC378369: __cxa_finalize (cxa_finalize.c:56)
==23284== by 0x8110BB2: ??? (in /home/even/qgis/QGIS/build/output/lib/libqgis_core.so.3.1.0)
==23284== by 0x4010DE6: _dl_fini (dl-fini.c:235)
==23284== by 0xC377FF7: __run_exit_handlers (exit.c:82)
==23284== by 0xC378044: exit (exit.c:104)
==23284== by 0xC35E836: (below main) (libc-start.c:325)
==23284== Address 0xaed0c6f0 is 0 bytes inside a block of size 32 free'd
==23284== at 0x4C2ECF0: free (vg_replace_malloc.c:530)
==23284== by 0x149103FD: pj_dealloc (pj_malloc.c:133)
==23284== by 0x88C1FB0: QgsProjContextStore::~QgsProjContextStore() (qgscoordinatetransform_p.cpp:45)
==23284== by 0xBE23DF5: (anonymous namespace)::run(void*) (atexit_thread.cc:71)
==23284== by 0xC377FF7: __run_exit_handlers (exit.c:82)
==23284== by 0xC378044: exit (exit.c:104)
==23284== by 0xC35E836: (below main) (libc-start.c:325)
==23284== Block was alloc'd at
==23284== at 0x4C2DBF6: malloc (vg_replace_malloc.c:299)
==23284== by 0x14911D8A: pj_ctx_alloc (pj_ctx.c:109)
==23284== by 0x88C1F64: QgsProjContextStore::QgsProjContextStore() (qgscoordinatetransform_p.cpp:40)
==23284== by 0x88C505B: __tls_init (qgscoordinatetransform_p.cpp:33)
==23284== by 0x88C5131: TLS wrapper function for QgsCoordinateTransformPrivate::mProjContext (in /home/even/qgis/QGIS/build/output/lib/libqgis_core.so.3.1.0)
==23284== by 0x88C39F6: QgsCoordinateTransformPrivate::threadLocalProjData() (qgscoordinatetransform_p.cpp:228)
==23284== by 0x88C33BE: QgsCoordinateTransformPrivate::initialize() (qgscoordinatetransform_p.cpp:162)
I've recently lost some hair chasing mysterious crashes at QGIS exit
and finally figured out this was due to an old version of the GRASS
plugin that was loaded together with the new version, because the
current filter is *.so* . So restrict this to plain *.so extension,
which will be consistent with what QgsProviderRegistry::init() does.
For more context
https://lists.osgeo.org/pipermail/qgis-developer/2018-June/053546.html