Browse Source

Hopefully fix thread safety issue

Operator = is not thread-safe, but copy constructor looks to be. This
is causing an intermittent crash.
QGC4.4
Don Gagne 11 years ago
parent
commit
6cb93da756
  1. 18
      libs/opmapcontrol/src/core/pureimagecache.cpp

18
libs/opmapcontrol/src/core/pureimagecache.cpp

@ -90,9 +90,7 @@ namespace core {
return false; return false;
} }
} }
QSqlDatabase db; QSqlDatabase db(QSqlDatabase::addDatabase("QSQLITE",QLatin1String("CreateConn")));
db = QSqlDatabase::addDatabase("QSQLITE",QLatin1String("CreateConn"));
db.setDatabaseName(file); db.setDatabaseName(file);
if (!db.open()) if (!db.open())
{ {
@ -181,8 +179,7 @@ namespace core {
qlonglong id=++ConnCounter; qlonglong id=++ConnCounter;
Mcounter.unlock(); Mcounter.unlock();
{ {
QSqlDatabase cn; QSqlDatabase cn(QSqlDatabase::addDatabase("QSQLITE",QString::number(id)));
cn = QSqlDatabase::addDatabase("QSQLITE",QString::number(id));
QString db=gtilecache+"Data.qmdb"; QString db=gtilecache+"Data.qmdb";
cn.setDatabaseName(db); cn.setDatabaseName(db);
cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE"); cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE");
@ -228,9 +225,7 @@ namespace core {
QString db=dir+"Data.qmdb"; QString db=dir+"Data.qmdb";
{ {
QSqlDatabase cn; QSqlDatabase cn(QSqlDatabase::addDatabase("QSQLITE",QString::number(id)));
cn = QSqlDatabase::addDatabase("QSQLITE",QString::number(id));
cn.setDatabaseName(db); cn.setDatabaseName(db);
cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE"); cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE");
@ -262,11 +257,10 @@ namespace core {
ret=QFileInfo(db).exists(); ret=QFileInfo(db).exists();
if(ret) if(ret)
{ {
QSqlDatabase cn;
Mcounter.lock(); Mcounter.lock();
qlonglong id=++ConnCounter; qlonglong id=++ConnCounter;
Mcounter.unlock(); Mcounter.unlock();
cn = QSqlDatabase::addDatabase("QSQLITE",QString::number(id)); QSqlDatabase cn(QSqlDatabase::addDatabase("QSQLITE",QString::number(id)));
cn.setDatabaseName(db); cn.setDatabaseName(db);
cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE"); cn.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE");
if(cn.open()) if(cn.open())
@ -304,12 +298,12 @@ namespace core {
ret=CreateEmptyDB(destFile); ret=CreateEmptyDB(destFile);
} }
if(!ret) return false; if(!ret) return false;
QSqlDatabase ca = QSqlDatabase::addDatabase("QSQLITE","ca"); QSqlDatabase ca(QSqlDatabase::addDatabase("QSQLITE","ca"));
ca.setDatabaseName(sourceFile); ca.setDatabaseName(sourceFile);
if(ca.open()) if(ca.open())
{ {
QSqlDatabase cb = QSqlDatabase::addDatabase("QSQLITE","cb"); QSqlDatabase cb(QSqlDatabase::addDatabase("QSQLITE","cb"));
cb.setDatabaseName(destFile); cb.setDatabaseName(destFile);
if(cb.open()) if(cb.open())
{ {

Loading…
Cancel
Save