From b7e62004335987638184942039e60980476ab5b1 Mon Sep 17 00:00:00 2001 From: Wong Cho Ching Date: Sat, 25 Jan 2014 01:53:57 +0800 Subject: [PATCH 1/2] Fixes Ghost Peak Controller Bug https://github.com/LMMS/lmms/issues/115 --- include/preset_preview_play_handle.h | 2 ++ .../peak_controller_effect.cpp | 1 + .../peak_controller_effect_controls.cpp | 3 ++- src/core/preset_preview_play_handle.cpp | 26 +++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/include/preset_preview_play_handle.h b/include/preset_preview_play_handle.h index 3e4d4e53c..e5185cfbe 100644 --- a/include/preset_preview_play_handle.h +++ b/include/preset_preview_play_handle.h @@ -51,6 +51,8 @@ public: static ConstNotePlayHandleList nphsOfInstrumentTrack( const InstrumentTrack * _ct ); + static bool isPreviewing(); + private: static previewTrackContainer * s_previewTC; diff --git a/plugins/peak_controller_effect/peak_controller_effect.cpp b/plugins/peak_controller_effect/peak_controller_effect.cpp index f9b4049c5..4069c941b 100644 --- a/plugins/peak_controller_effect/peak_controller_effect.cpp +++ b/plugins/peak_controller_effect/peak_controller_effect.cpp @@ -81,6 +81,7 @@ PeakControllerEffect::~PeakControllerEffect() if( idx >= 0 ) { PeakController::s_effects.remove( idx ); + engine::getSong()->removeController( m_autoController ); } } diff --git a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp index eb7e5191d..34ee79a11 100644 --- a/plugins/peak_controller_effect/peak_controller_effect_controls.cpp +++ b/plugins/peak_controller_effect/peak_controller_effect_controls.cpp @@ -29,6 +29,7 @@ #include "PeakController.h" #include "peak_controller_effect_controls.h" #include "peak_controller_effect.h" +#include "preset_preview_play_handle.h" PeakControllerEffectControls:: @@ -66,7 +67,7 @@ void PeakControllerEffectControls::loadSettings( const QDomElement & _this ) } m_effect->m_effectId = effectId; - if( m_effect->m_autoController ) + if( m_effect->m_autoController && presetPreviewPlayHandle::isPreviewing() == false ) { delete m_effect->m_autoController; m_effect->m_autoController = 0; diff --git a/src/core/preset_preview_play_handle.cpp b/src/core/preset_preview_play_handle.cpp index 09139ba21..94066eced 100644 --- a/src/core/preset_preview_play_handle.cpp +++ b/src/core/preset_preview_play_handle.cpp @@ -89,12 +89,24 @@ public: m_dataMutex.unlock(); } + bool isPreviewing() + { + bool ret = m_dataMutex.tryLock(); + if( ret == true ) + { + m_dataMutex.unlock(); + } + return ret; + } + private: InstrumentTrack * m_previewInstrumentTrack; notePlayHandle * m_previewNote; QMutex m_dataMutex; + friend presetPreviewPlayHandle; + } ; @@ -242,3 +254,17 @@ ConstNotePlayHandleList presetPreviewPlayHandle::nphsOfInstrumentTrack( } + + +bool presetPreviewPlayHandle::isPreviewing() +{ + bool ret = s_previewTC->m_dataMutex.tryLock(); + if( ret == true ) + { + s_previewTC->m_dataMutex.unlock(); + } + return ret; +} + + + From 6cda610f48a7b76f9f3ed6ec1be7cf51b58f03d8 Mon Sep 17 00:00:00 2001 From: Wong Cho Ching Date: Sat, 25 Jan 2014 22:49:41 +0800 Subject: [PATCH 2/2] Fixes build issue --- src/core/preset_preview_play_handle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/preset_preview_play_handle.cpp b/src/core/preset_preview_play_handle.cpp index 94066eced..22ff31a50 100644 --- a/src/core/preset_preview_play_handle.cpp +++ b/src/core/preset_preview_play_handle.cpp @@ -105,7 +105,7 @@ private: notePlayHandle * m_previewNote; QMutex m_dataMutex; - friend presetPreviewPlayHandle; + friend class presetPreviewPlayHandle; } ;