Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
transfer-engine
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
mer-core
transfer-engine
Commits
6f2b37b9
Commit
6f2b37b9
authored
Sep 03, 2014
by
msameer
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #23 from nemomobile/sql_db_fix
[transfer-engine] Fix QSqlDatabase leak.
parents
2c68e586
1b30204e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
3 deletions
+25
-3
declarative/declarativetransfermodel.cpp
declarative/declarativetransfermodel.cpp
+25
-3
No files found.
declarative/declarativetransfermodel.cpp
View file @
6f2b37b9
...
...
@@ -46,6 +46,24 @@ template <> bool compareIdentity<TransferDBRecord>(
return
item
.
transfer_id
==
reference
.
transfer_id
;
}
class
QSqlDatabaseWrapper
{
public:
QSqlDatabaseWrapper
(
const
QSqlDatabase
&
db
)
:
m_db
(
db
)
{}
~
QSqlDatabaseWrapper
()
{
QString
name
=
m_db
.
connectionName
();
m_db
=
QSqlDatabase
();
// Drop our last reference.
if
(
!
name
.
isEmpty
())
{
QSqlDatabase
::
removeDatabase
(
name
);
}
}
QSqlDatabase
&
database
()
{
return
m_db
;
}
private:
QSqlDatabase
m_db
;
};
TransferModel
::
TransferModel
(
QObject
*
parent
)
:
QAbstractListModel
(
parent
)
,
m_rows
(
new
QVector
<
TransferDBRecord
>
())
...
...
@@ -394,7 +412,7 @@ bool TransferModel::executeQuery(QVector<TransferDBRecord> *rows, int *activeTra
QSqlDatabase
TransferModel
::
database
()
{
static
QThreadStorage
<
QSqlDatabase
>
thread_database
;
static
QThreadStorage
<
QSqlDatabase
Wrapper
*
>
thread_database
;
if
(
!
thread_database
.
hasLocalData
())
{
const
QString
absDbPath
=
QDir
::
homePath
()
+
QDir
::
separator
()
...
...
@@ -407,10 +425,14 @@ QSqlDatabase TransferModel::database()
QLatin1String
(
"transferengine-"
)
+
uuid
);
database
.
setDatabaseName
(
absDbPath
);
database
.
setConnectOptions
(
QLatin1String
(
"QSQLITE_OPEN_READONLY"
));
// sanity check
thread_database
.
setLocalData
(
database
);
QSqlDatabaseWrapper
*
wrapper
=
new
QSqlDatabaseWrapper
(
database
);
thread_database
.
setLocalData
(
wrapper
);
}
QSqlDatabase
&
database
=
thread_database
.
localData
();
QSqlDatabaseWrapper
*
wrapper
=
thread_database
.
localData
();
QSqlDatabase
&
database
=
wrapper
->
database
();
if
(
!
database
.
isOpen
()
&&
!
database
.
open
())
{
qWarning
()
<<
"Failed to open transfer engine database"
;
qWarning
()
<<
database
.
lastError
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment