diff options
author | Arno van Amersfoort <arnova77@gmail.com> | 2020-01-20 09:10:15 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-20 09:10:15 +0100 |
commit | 14d7a96d1791d07d032118280da89bdaf3786ebb (patch) | |
tree | c7f5c892ea47d86e693065301f56eb54f72848a6 | |
parent | 3236f461d9978a1cdbd7122c2d3004da38f87edb (diff) | |
parent | 45214123d6b0837c2752a0fc5588a01176000f2c (diff) |
Merge pull request #17211 from arnova/cache_fatal_error_fix
fixed: Seeking with FileCache could lockup due to terminated thread
-rw-r--r-- | xbmc/filesystem/FileCache.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/xbmc/filesystem/FileCache.cpp b/xbmc/filesystem/FileCache.cpp index 1f87385685..59f05989cd 100644 --- a/xbmc/filesystem/FileCache.cpp +++ b/xbmc/filesystem/FileCache.cpp @@ -363,6 +363,8 @@ void CFileCache::Process() { CLog::Log(LOGDEBUG, "CFileCache::Process - Source read returned a fatal error! Will wait for buffer to empty."); + m_pCache->EndOfInput(); + while (m_pCache->WaitForData(0, 0) > 0) { if (m_seekEvent.WaitMSec(100)) @@ -531,10 +533,11 @@ int64_t CFileCache::Seek(int64_t iFilePosition, int iWhence) m_seekPos = std::min(iTarget, std::max((int64_t)0, m_fileSize - m_chunkSize)); m_seekEvent.Set(); - if (!m_seekEnded.Wait()) + while (!m_seekEnded.WaitMSec(100)) { - CLog::Log(LOGWARNING,"%s - seek to %" PRId64" failed.", __FUNCTION__, m_seekPos); - return -1; + // SeekEnded will never be set if FileCache thread is not running + if (!CThread::IsRunning()) + return -1; } /* wait for any remaining data */ |