aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2019-02-07 15:54:24 +0100
committerMarco Bubke <marco.bubke@qt.io>2019-02-12 14:02:12 +0000
commit44d5e101857523f0791cfe45ba73a45e0a4fdb33 (patch)
tree9ac40b11bdb2ae4eaf105f20d1682870bf48fcf2 /src/libs
parent97ec6b9ad2bb6859516928db0f98b740d8f72590 (diff)
ClangRefactoring: Fix progress counter
We use threads now and the code had to be adapted. Task-number: QTCREATORBUG-21950 Change-Id: Ie96c5bea1fa045588d0c5a8b18bfd1ccb5d9fdd9 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/clangsupport/progresscounter.h32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/libs/clangsupport/progresscounter.h b/src/libs/clangsupport/progresscounter.h
index fbdc9dda45..449754f914 100644
--- a/src/libs/clangsupport/progresscounter.h
+++ b/src/libs/clangsupport/progresscounter.h
@@ -26,6 +26,7 @@
#pragma once
#include <functional>
+#include <mutex>
namespace ClangBackEnd {
@@ -33,6 +34,7 @@ class ProgressCounter
{
public:
using SetProgressCallback = std::function<void(int, int)>;
+ using Lock = std::lock_guard<std::mutex>;
ProgressCounter(SetProgressCallback &&progressCallback)
: m_progressCallback(std::move(progressCallback))
@@ -40,6 +42,8 @@ public:
void addTotal(int total)
{
+ Lock lock(m_mutex);
+
if (total) {
m_total += total;
@@ -49,6 +53,8 @@ public:
void removeTotal(int total)
{
+ Lock lock(m_mutex);
+
if (total) {
m_total -= total;
@@ -58,6 +64,8 @@ public:
void addProgress(int progress)
{
+ Lock lock(m_mutex);
+
if (progress) {
m_progress += progress;
@@ -65,27 +73,33 @@ public:
}
}
- void sendProgress()
+ int total() const
{
- m_progressCallback(m_progress, m_total);
+ Lock lock(m_mutex);
- if (m_progress >= m_total) {
- m_progress = 0;
- m_total = 0;
- }
+ return m_total;
}
- int total() const
+ int progress() const
{
+ Lock lock(m_mutex);
+
return m_total;
}
- int progress() const
+private:
+ void sendProgress()
{
- return m_total;
+ m_progressCallback(m_progress, m_total);
+
+ if (m_progress >= m_total) {
+ m_progress = 0;
+ m_total = 0;
+ }
}
private:
+ mutable std::mutex m_mutex;
std::function<void(int, int)> m_progressCallback;
int m_progress = 0;
int m_total = 0;