From 51c21ac62730427f9bc16fa2cf2caa1ca7e33685 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Sun, 5 Aug 2007 23:54:26 +0000 Subject: [PATCH] protect m_previewPlayHandle with mutex git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@513 0778d3d1-df1d-0410-868b-ea421aaaa00d --- include/file_browser.h | 3 +++ src/core/file_browser.cpp | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/file_browser.h b/include/file_browser.h index 578034cd2..00339bce8 100644 --- a/include/file_browser.h +++ b/include/file_browser.h @@ -36,11 +36,13 @@ #ifdef QT4 #include +#include #else #include #include +#include #define cleanPath cleanDirPath @@ -129,6 +131,7 @@ private: QPoint m_pressPos; playHandle * m_previewPlayHandle; + QMutex m_pphMutex; } ; diff --git a/src/core/file_browser.cpp b/src/core/file_browser.cpp index 36d0dc3ac..f2a8cf4c0 100644 --- a/src/core/file_browser.cpp +++ b/src/core/file_browser.cpp @@ -451,7 +451,8 @@ listView::listView( QWidget * _parent ) : Q3ListView( _parent ), m_mousePressed( FALSE ), m_pressPos(), - m_previewPlayHandle( NULL ) + m_previewPlayHandle( NULL ), + m_pphMutex() { addColumn( tr( "Files" ) ); setTreeStepSize( 12 ); @@ -560,6 +561,10 @@ void listView::contentsMousePressEvent( QMouseEvent * _me ) fileItem * f = dynamic_cast( i ); if( f != NULL ) { + if( !m_pphMutex.tryLock() ) + { + return; + } if( m_previewPlayHandle != NULL ) { engine::getMixer()->removePlayHandle( @@ -595,6 +600,7 @@ void listView::contentsMousePressEvent( QMouseEvent * _me ) engine::getMixer()->addPlayHandle( m_previewPlayHandle ); } + m_pphMutex.unlock(); } } @@ -650,6 +656,11 @@ void listView::contentsMouseMoveEvent( QMouseEvent * _me ) void listView::contentsMouseReleaseEvent( QMouseEvent * _me ) { + if( !m_pphMutex.tryLock() ) + { + return; + } + m_mousePressed = FALSE; if( m_previewPlayHandle != NULL ) { @@ -665,12 +676,14 @@ void listView::contentsMouseReleaseEvent( QMouseEvent * _me ) { s->setDoneMayReturnTrue( TRUE ); m_previewPlayHandle = NULL; + m_pphMutex.unlock(); return; } } engine::getMixer()->removePlayHandle( m_previewPlayHandle ); m_previewPlayHandle = NULL; } + m_pphMutex.unlock(); }