aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArno van Amersfoort <arnova77@gmail.com>2020-01-20 09:10:15 +0100
committerGitHub <noreply@github.com>2020-01-20 09:10:15 +0100
commit14d7a96d1791d07d032118280da89bdaf3786ebb (patch)
treec7f5c892ea47d86e693065301f56eb54f72848a6
parent3236f461d9978a1cdbd7122c2d3004da38f87edb (diff)
parent45214123d6b0837c2752a0fc5588a01176000f2c (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.cpp9
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 */