[Development] Threads and the SQL Module

Lorenz Haas lykurg at gmail.com
Wed Feb 15 20:24:05 CET 2017


Hi,

AFAIS it does not matter if sqlite is thread safe or not. The problem is
that QSQLiteDriver itself is not thread safe. For example if two threads
call beginTransaction() on the same driver and the "COMMIT" fails, both
threads will call QSqlDriver::setLastError() which does "d->error =
error;". And here is the first problem.

I am not an expert with QSqlQuery, but since it uses the driver, I bet,
you'll also find UB and races there.

Cheers
Lorenz

Am 15.02.2017 um 13:37 schrieb Łukasz Korbel:
> According to
> http://doc.qt.io/qt-5/threads-modules.html#threads-and-the-sql-module
> database connection should be used within one thread *only*.
> 
> I have checked SQLite driver and according to
> https://www.sqlite.org/threadsafe.html it supports multithreading by
> default. And it seems that Qt implementation does not restrict it
> (http://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/sqldrivers/sqlite/qsql_sqlite.cpp#n645).
> Code I'm working on is creating QSqlQuery for the same connection in
> different threads and it works.
> 
> I understand it doesn't mean Qt want or need to support such use case
> but maybe documentation
> can be slightly more accurate? Right now it implies that database
> connection can never be used from different threads but it seem it
> depends more on particular driver/3rdparty lib.
> 
> 
> *Łukasz Korbel *
> Senior Software Developer
> Email: 	lkorbel at milosolutions.com
> Skype: 	lukasz_korbel
> *Milo Solutions*
> www.milosolutions.com <http://www.milosolutions.com> | Facebook
> <https://www.facebook.com/theMiloSolutions> | Twitter
> <https://twitter.com/milosolutions>
> Disclaimer: This e-mail and any attachments contain information that may
> be privileged or confidential and is the property of Milo Solutions. If
> you are not the intended recipient, please notify me immediately by
> replying to this e-mail, and then delete it. Any unauthorised
> dissemination, distribution, copying or use of this communication is
> strictly prohibited. The contents of an attachment to this e-mail may
> contain software viruses, which could damage your own computer system.
> Although this e-mail and any files attached to it may have been checked
> with virus detection software before transmission you should carry out
> your own virus checks before opening the attachment. No liability can be
> accepted for any damage which you may sustain as a result of software
> viruses.
> 
> 
> 
> _______________________________________________
> Development mailing list
> Development at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/development
> 



More information about the Development mailing list