diff --git a/rtgui/histogrampanel.cc b/rtgui/histogrampanel.cc index 9123e7841..6bda0812e 100644 --- a/rtgui/histogrampanel.cc +++ b/rtgui/histogrampanel.cc @@ -1181,7 +1181,8 @@ void HistogramArea::update( bhistRaw = histBlueRaw; break; case ScopeType::PARADE: - case ScopeType::WAVEFORM: + case ScopeType::WAVEFORM: { + MyWriterLock wave_lock(wave_mutex); waveform_scale = waveformScale; rwave = waveformRed; gwave = waveformGreen; @@ -1189,6 +1190,7 @@ void HistogramArea::update( lwave = waveformLuma; parade_buffer_r_dirty = parade_buffer_g_dirty = parade_buffer_b_dirty = wave_buffer_dirty = wave_buffer_luma_dirty = true; break; + } case ScopeType::VECTORSCOPE_HS: vectorscope_scale = vectorscopeScale; vect_hs = vectorscopeHS; @@ -1313,6 +1315,7 @@ void HistogramArea::updateBackBuffer () cr->unset_dash(); + MyReaderLock wave_lock(wave_mutex); if (valid && (scopeType == ScopeType::HISTOGRAM || scopeType == ScopeType::HISTOGRAM_RAW)) { bool rawMode = scopeType == ScopeType::HISTOGRAM_RAW; @@ -1429,6 +1432,7 @@ void HistogramArea::updateBackBuffer () } else if (scopeType == ScopeType::VECTORSCOPE_HC || scopeType == ScopeType::VECTORSCOPE_HS) { drawVectorscope(cr, w, h); } + wave_lock.release(); // Draw the frame's border style->render_frame(cr, 0, 0, surface->get_width(), surface->get_height()); diff --git a/rtgui/histogrampanel.h b/rtgui/histogrampanel.h index 393df51a5..26b744546 100644 --- a/rtgui/histogrampanel.h +++ b/rtgui/histogrampanel.h @@ -169,6 +169,7 @@ protected: bool vect_hc_buffer_dirty, vect_hs_buffer_dirty; int waveform_scale; array2D rwave, gwave, bwave, lwave; + MyRWMutex wave_mutex; std::vector parade_buffer_r; std::vector parade_buffer_g; std::vector parade_buffer_b;