Skip to content

Commit 237e515

Browse files
committed
Chrono uses synchronized_value
1 parent 15e06bc commit 237e515

File tree

2 files changed

+27
-19
lines changed

2 files changed

+27
-19
lines changed

libmamba/src/core/progress_bar_impl.cpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -239,32 +239,32 @@ namespace mamba
239239

240240
bool Chrono::started() const
241241
{
242-
return m_state == ChronoState::started;
242+
return m_data->state == ChronoState::started;
243243
}
244244

245245
bool Chrono::paused() const
246246
{
247-
return m_state == ChronoState::paused;
247+
return m_data->state == ChronoState::paused;
248248
}
249249

250250
bool Chrono::stopped() const
251251
{
252-
return m_state == ChronoState::stopped;
252+
return m_data->state == ChronoState::stopped;
253253
}
254254

255255
bool Chrono::terminated() const
256256
{
257-
return m_state == ChronoState::terminated;
257+
return m_data->state == ChronoState::terminated;
258258
}
259259

260260
bool Chrono::unset() const
261261
{
262-
return m_state == ChronoState::unset;
262+
return m_data->state == ChronoState::unset;
263263
}
264264

265265
ChronoState Chrono::status() const
266266
{
267-
return m_state;
267+
return m_data->state;
268268
}
269269

270270
void Chrono::start()
@@ -274,25 +274,24 @@ namespace mamba
274274

275275
void Chrono::start(const time_point_t& time_point)
276276
{
277-
std::lock_guard<std::mutex> lock(m_mutex);
278-
m_start = time_point;
279-
m_state = ChronoState::started;
277+
auto synched_data = m_data.synchronize();
278+
synched_data->start = time_point;
279+
synched_data->state = ChronoState::started;
280280
}
281281

282282
void Chrono::pause()
283283
{
284284
compute_elapsed();
285-
std::lock_guard<std::mutex> lock(m_mutex);
286-
m_state = ChronoState::paused;
285+
m_data->state = ChronoState::paused;
287286
}
288287

289288
void Chrono::resume()
290289
{
291-
if (m_state != ChronoState::started)
290+
auto synched_data = m_data.synchronize();
291+
if (synched_data->state != ChronoState::started)
292292
{
293-
std::lock_guard<std::mutex> lock(m_mutex);
294-
m_state = ChronoState::started;
295-
m_start = now() - m_elapsed_ns;
293+
synched_data->state = ChronoState::started;
294+
synched_data->start = now() - synched_data->elapsed_ns;
296295
}
297296
}
298297

libmamba/src/core/progress_bar_impl.hpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,21 @@ namespace mamba
7575

7676
std::unique_lock<std::mutex> chrono_lock();
7777

78+
7879
private:
7980

80-
time_point_t m_start;
81-
duration_t m_elapsed_ns = duration_t::zero();
82-
ChronoState m_state = ChronoState::unset;
83-
std::mutex m_mutex;
81+
struct Data
82+
{
83+
Data() // workaround for CWG2335
84+
{
85+
}
86+
87+
time_point_t start;
88+
duration_t elapsed_ns = duration_t::zero();
89+
ChronoState state = ChronoState::unset;
90+
};
91+
92+
util::synchronized_value<Data> m_data;
8493

8594
void compute_elapsed();
8695

0 commit comments

Comments
 (0)