From 162610bae5ca900b093645ff0e56d87d12460d79 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser <muesli@gmail.com> Date: Fri, 7 Jun 2013 08:55:53 +0200 Subject: [PATCH] * Mutex protect TrackData. --- src/libtomahawk/TrackData.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/libtomahawk/TrackData.cpp b/src/libtomahawk/TrackData.cpp index f559efa7f..c15f5637e 100644 --- a/src/libtomahawk/TrackData.cpp +++ b/src/libtomahawk/TrackData.cpp @@ -46,9 +46,9 @@ QHash< QString, trackdata_wptr > TrackData::s_trackDatasByName = QHash< QString, QHash< unsigned int, trackdata_wptr > TrackData::s_trackDatasById = QHash< unsigned int, trackdata_wptr >(); static QMutex s_datanameCacheMutex; +static QMutex s_memberMutex; static QReadWriteLock s_dataidMutex; - inline QString cacheKey( const QString& artist, const QString& track ) { @@ -257,8 +257,11 @@ TrackData::loadSocialActions() void TrackData::setAllSocialActions( const QList< SocialAction >& socialActions ) { - m_allSocialActions = socialActions; - parseSocialActions(); + { + QMutexLocker locker( &s_memberMutex ); + m_allSocialActions = socialActions; + parseSocialActions(); + } emit socialActionsLoaded(); } @@ -267,6 +270,7 @@ TrackData::setAllSocialActions( const QList< SocialAction >& socialActions ) QList< SocialAction > TrackData::allSocialActions() const { + QMutexLocker locker( &s_memberMutex ); return m_allSocialActions; } @@ -292,6 +296,8 @@ TrackData::parseSocialActions() bool TrackData::loved() { + QMutexLocker locker( &s_memberMutex ); + if ( m_socialActionsLoaded ) { return m_currentSocialActions[ "Love" ].toBool(); @@ -341,8 +347,9 @@ TrackData::loadStats() QList< Tomahawk::PlaybackLog > TrackData::playbackHistory( const Tomahawk::source_ptr& source ) const { - QList< Tomahawk::PlaybackLog > history; + QMutexLocker locker( &s_memberMutex ); + QList< Tomahawk::PlaybackLog > history; foreach ( const PlaybackLog& log, m_playbackHistory ) { if ( source.isNull() || log.source == source ) @@ -358,7 +365,10 @@ TrackData::playbackHistory( const Tomahawk::source_ptr& source ) const void TrackData::setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackData ) { - m_playbackHistory = playbackData; + { + QMutexLocker locker( &s_memberMutex ); + m_playbackHistory = playbackData; + } emit statsLoaded(); } @@ -366,6 +376,8 @@ TrackData::setPlaybackHistory( const QList< Tomahawk::PlaybackLog >& playbackDat unsigned int TrackData::playbackCount( const source_ptr& source ) { + QMutexLocker locker( &s_memberMutex ); + unsigned int count = 0; foreach ( const PlaybackLog& log, m_playbackHistory ) {