diff options
author | Marco Bubke <marco.bubke@qt.io> | 2019-07-10 14:48:30 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2019-07-11 09:02:43 +0000 |
commit | 56277de27f0753e52482a302d9a43b230268f59d (patch) | |
tree | 82d31a231a64f14951b27dab265b1ba1fc81fa48 /src/tools | |
parent | d7e5935396d07de26f799e7e39987d8330916db2 (diff) | |
download | qt-creator-56277de27f0753e52482a302d9a43b230268f59d.tar.gz |
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.h | 13 |
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 |