From 146d72a7390d40a5daca1a6a34432786c300e1bd Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Mon, 11 Mar 2013 17:46:19 +0000 Subject: Remove mutex from file seselector mutex would, in some rare cases fail to lock and cause a freeze of the GUI. Also restored some code that was removed before and should not have been removed to fix a bug with folder selection where you select the same file or folder twice (e.g. select a backup on the restore page, press back, then select that backup again.) --- gui/fileselector.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'gui/fileselector.cpp') diff --git a/gui/fileselector.cpp b/gui/fileselector.cpp index 37eeed2ca..8b5804494 100644 --- a/gui/fileselector.cpp +++ b/gui/fileselector.cpp @@ -391,20 +391,14 @@ int GUIFileSelector::Render(void) } // Update the file list if needed - pthread_mutex_lock(&updateFileListmutex); if (updateFileList) { - pthread_mutex_unlock(&updateFileListmutex); string value; DataManager::GetValue(mPathVar, value); if (GetFileList(value) == 0) { - pthread_mutex_lock(&updateFileListmutex); updateFileList = false; - pthread_mutex_unlock(&updateFileListmutex); } else { return 0; } - } else { - pthread_mutex_unlock(&updateFileListmutex); } // This tells us how many lines we can actually render @@ -562,11 +556,9 @@ int GUIFileSelector::Render(void) } // If a change came in during the render then we need to do another redraw so leave mUpdate alone if updateFileList is true. - pthread_mutex_lock(&updateFileListmutex); if (!updateFileList) { mUpdate = 0; } - pthread_mutex_unlock(&updateFileListmutex); return 0; } @@ -846,6 +838,10 @@ int GUIFileSelector::NotifyTouch(TOUCH_STATE state, int x, int y) int GUIFileSelector::NotifyVarChange(std::string varName, std::string value) { + if (varName.empty()) { + // Always clear the data variable so we know to use it + DataManager::SetValue(mVariable, ""); + } if (!mHeaderIsStatic) { std::string newValue = gui_parse_text(mHeaderText); if (mLastValue != newValue) { @@ -861,9 +857,7 @@ int GUIFileSelector::NotifyVarChange(std::string varName, std::string value) if (varName == mSortVariable) { DataManager::GetValue(mSortVariable, mSortOrder); } - pthread_mutex_lock(&updateFileListmutex); updateFileList = true; - pthread_mutex_unlock(&updateFileListmutex); mStart = 0; scrollingY = 0; scrollingSpeed = 0; @@ -1004,9 +998,7 @@ void GUIFileSelector::SetPageFocus(int inFocus) { if (inFocus) { - pthread_mutex_lock(&updateFileListmutex); updateFileList = true; - pthread_mutex_unlock(&updateFileListmutex); scrollingY = 0; scrollingSpeed = 0; mUpdate = 1; -- cgit v1.2.3