diff options
author | Honglei Zhang <honglei.zhang@nokia.com> | 2011-12-08 12:17:08 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-04-03 06:51:58 (GMT) |
commit | 8cd69eb1ffd37194e3d736a3bb5ce8511b8b8854 (patch) | |
tree | 56e5a299418ed3ef2bc55f876c6c74600933d22c /src/sql/kernel | |
parent | cdc1720730dff64ef61e4cb9457c46dae8101315 (diff) | |
download | Qt-8cd69eb1ffd37194e3d736a3bb5ce8511b8b8854.zip Qt-8cd69eb1ffd37194e3d736a3bb5ce8511b8b8854.tar.gz Qt-8cd69eb1ffd37194e3d736a3bb5ce8511b8b8854.tar.bz2 |
Memory leak fix of sqlite driver when close failed
If an ongoing query is not finalized before close function is called,
sqlite driver can't close the connection to sqlite. In this case, the
failure is only reported to the client via getLastError(). Even if the
client want to handle this case, there is no easy way to revoke the
close function. This commit finalizes all queries before
close is called.
Task-number: QTBUG-16967
Change-Id: I069f6073bd46f53780e13d269e44aa86366e0574
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Reviewed-by: Mark Brand <mabrand@mabrand.nl>
Diffstat (limited to 'src/sql/kernel')
-rw-r--r-- | src/sql/kernel/qsqlresult.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 4aeae1f..de348c9 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -48,6 +48,7 @@ #include "qsqlresult.h" #include "qvector.h" #include "qsqldriver.h" +#include "qpointer.h" #include <QDebug> QT_BEGIN_NAMESPACE @@ -64,7 +65,7 @@ class QSqlResultPrivate { public: QSqlResultPrivate(QSqlResult* d) - : q(d), sqldriver(0), idx(QSql::BeforeFirstRow), active(false), + : q(d), idx(QSql::BeforeFirstRow), active(false), isSel(false), forwardOnly(false), precisionPolicy(QSql::LowPrecisionDouble), bindCount(0), binds(QSqlResult::PositionalBinding) {} @@ -98,7 +99,7 @@ public: public: QSqlResult* q; - const QSqlDriver* sqldriver; + QPointer<QSqlDriver> sqldriver; int idx; QString sql; bool active; @@ -250,7 +251,7 @@ QString QSqlResultPrivate::namedToPositionalBinding() QSqlResult::QSqlResult(const QSqlDriver *db) { d = new QSqlResultPrivate(this); - d->sqldriver = db; + d->sqldriver = const_cast<QSqlDriver *>(db); if(db) { setNumericalPrecisionPolicy(db->numericalPrecisionPolicy()); } |