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 )
     {