mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-24 18:55:30 +00:00
Bug 1412737. P1 - improve error handling. r=bechen,gerald
MozReview-Commit-ID: 776P80x63y8 --HG-- extra : rebase_source : f2384a13f09e3606a7ee705ad3400afd1de738ba extra : intermediate-source : e57ec5337931951f45b8a922c603e96088cf6ef9 extra : source : 719772d4b77154b419e501eabbf466a679325720
This commit is contained in:
parent
26b99cd496
commit
7b251a2f79
@ -14,6 +14,7 @@
|
||||
#include "MemoryBlockCache.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/ClearOnShutdown.h"
|
||||
#include "mozilla/ErrorNames.h"
|
||||
#include "mozilla/Logging.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/ReentrantMonitor.h"
|
||||
@ -35,9 +36,11 @@ namespace mozilla {
|
||||
|
||||
#undef LOG
|
||||
#undef LOGI
|
||||
#undef LOGE
|
||||
LazyLogModule gMediaCacheLog("MediaCache");
|
||||
#define LOG(...) MOZ_LOG(gMediaCacheLog, LogLevel::Debug, (__VA_ARGS__))
|
||||
#define LOGI(...) MOZ_LOG(gMediaCacheLog, LogLevel::Info, (__VA_ARGS__))
|
||||
#define LOGE(...) NS_DebugBreak(NS_DEBUG_WARNING, nsPrintfCString(__VA_ARGS__).get(), nullptr, __FILE__, __LINE__)
|
||||
|
||||
// For HTTP seeking, if number of bytes needing to be
|
||||
// seeked forward is less than this value then a read is
|
||||
@ -2475,8 +2478,6 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
|
||||
NS_ASSERTION(!NS_IsMainThread(), "Don't call on main thread");
|
||||
|
||||
ReentrantMonitorAutoEnter mon(mMediaCache->GetReentrantMonitor());
|
||||
if (mClosed)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Cache the offset in case it is changed again when we are waiting for the
|
||||
// monitor to be notified to avoid reading at the wrong position.
|
||||
@ -2485,10 +2486,16 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
|
||||
uint32_t count = 0;
|
||||
// Read one block (or part of a block) at a time
|
||||
while (count < aCount) {
|
||||
if (mClosed) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
int32_t streamBlock = OffsetToBlockIndex(streamOffset);
|
||||
if (streamBlock < 0) {
|
||||
break;
|
||||
LOGE("Stream %p invalid offset=%" PRId64, this, streamOffset);
|
||||
return NS_ERROR_ILLEGAL_VALUE;
|
||||
}
|
||||
|
||||
uint32_t offsetInStreamBlock = uint32_t(streamOffset - streamBlock*BLOCK_SIZE);
|
||||
int64_t size = std::min<int64_t>(aCount - count, BLOCK_SIZE - offsetInStreamBlock);
|
||||
|
||||
@ -2556,11 +2563,6 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
|
||||
|
||||
// No data has been read yet, so block
|
||||
mon.Wait();
|
||||
if (mClosed) {
|
||||
// We may have successfully read some data, but let's just throw
|
||||
// that out.
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -2573,10 +2575,10 @@ MediaCacheStream::Read(char* aBuffer, uint32_t aCount, uint32_t* aBytes)
|
||||
nsresult rv = mMediaCache->ReadCacheFile(
|
||||
offset, aBuffer + count, int32_t(size), &bytes);
|
||||
if (NS_FAILED(rv)) {
|
||||
if (count == 0)
|
||||
return rv;
|
||||
// If we did successfully read some data, may as well return it
|
||||
break;
|
||||
nsCString name;
|
||||
GetErrorName(rv, name);
|
||||
LOGE("Stream %p ReadCacheFile failed, rv=%s", this, name.Data());
|
||||
return rv;
|
||||
}
|
||||
streamOffset += bytes;
|
||||
count += bytes;
|
||||
|
Loading…
Reference in New Issue
Block a user