aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-07-10 14:48:30 +0200
committerMarco Bubke <marco.bubke@qt.io>2019-07-11 09:02:43 +0000
commit56277de27f0753e52482a302d9a43b230268f59d (patch)
tree82d31a231a64f14951b27dab265b1ba1fc81fa48 /src/tools
parentd7e5935396d07de26f799e7e39987d8330916db2 (diff)
ClangPchManager: Protect fetchPchSources
It was not protected by a transaction so it was not thread save. Change-Id: Ib4529d0e94942d3cbafb46705a0256812908c8c6 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
index 00bb429dba..f75d83b572 100644
--- a/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
+++ b/src/tools/clangpchmanagerbackend/source/builddependenciesstorage.h
@@ -68,7 +68,18 @@ public:
FilePathIds fetchPchSources(ProjectPartId projectPartId) const override
{
- return fetchPchSourcesStatement.template values<FilePathId>(1024, projectPartId.projectPathId);
+ try {
+ Sqlite::DeferredTransaction transaction{database};
+
+ FilePathIds values = fetchPchSourcesStatement
+ .template values<FilePathId>(1024, projectPartId.projectPathId);
+
+ transaction.commit();
+
+ return values;
+ } catch (const Sqlite::StatementIsBusy &) {
+ return fetchPchSources(projectPartId);
+ }
}
FilePathIds fetchSources(ProjectPartId projectPartId) const override