diff --git a/netwerk/base/nsIncrementalStreamLoader.cpp b/netwerk/base/nsIncrementalStreamLoader.cpp index a7298be3f..8890333f8 100644 --- a/netwerk/base/nsIncrementalStreamLoader.cpp +++ b/netwerk/base/nsIncrementalStreamLoader.cpp @@ -11,10 +11,7 @@ #include -nsIncrementalStreamLoader::nsIncrementalStreamLoader() - : mData(), mBytesConsumed(0) -{ -} +nsIncrementalStreamLoader::nsIncrementalStreamLoader() = default; nsIncrementalStreamLoader::~nsIncrementalStreamLoader() { @@ -49,7 +46,7 @@ NS_IMPL_ISUPPORTS(nsIncrementalStreamLoader, nsIIncrementalStreamLoader, NS_IMETHODIMP nsIncrementalStreamLoader::GetNumBytesRead(uint32_t* aNumBytes) { - *aNumBytes = mBytesConsumed + mData.length(); + *aNumBytes = mBytesRead; return NS_OK; } @@ -180,7 +177,6 @@ nsIncrementalStreamLoader::WriteSegmentFun(nsIInputStream *inStr, } } - self->mBytesConsumed += consumedCount; *writeCount = count; return NS_OK; @@ -198,6 +194,8 @@ nsIncrementalStreamLoader::OnDataAvailable(nsIRequest* request, nsISupports *ctx uint32_t countRead; nsresult rv = inStr->ReadSegments(WriteSegmentFun, this, count, &countRead); mRequest = nullptr; + NS_ENSURE_SUCCESS(rv, rv); + mBytesRead += countRead; return rv; } diff --git a/netwerk/base/nsIncrementalStreamLoader.h b/netwerk/base/nsIncrementalStreamLoader.h index f04d4a958..0e2b532e6 100644 --- a/netwerk/base/nsIncrementalStreamLoader.h +++ b/netwerk/base/nsIncrementalStreamLoader.h @@ -47,8 +47,9 @@ protected: // available. mozilla::Vector mData; - // Number of consumed bytes from the mData. - size_t mBytesConsumed; + // Number of bytes read, which may differ from the number of bytes in mData, + // since we incrementally remove from there. + mozilla::Atomic mBytesRead; }; #endif // nsIncrementalStreamLoader_h__ diff --git a/netwerk/base/nsStreamLoader.cpp b/netwerk/base/nsStreamLoader.cpp index a73b038a7..9990d1882 100644 --- a/netwerk/base/nsStreamLoader.cpp +++ b/netwerk/base/nsStreamLoader.cpp @@ -54,7 +54,7 @@ NS_IMPL_ISUPPORTS(nsStreamLoader, nsIStreamLoader, NS_IMETHODIMP nsStreamLoader::GetNumBytesRead(uint32_t* aNumBytes) { - *aNumBytes = mData.length(); + *aNumBytes = mBytesRead; return NS_OK; } @@ -150,7 +150,10 @@ nsStreamLoader::OnDataAvailable(nsIRequest* request, nsISupports *ctxt, uint64_t sourceOffset, uint32_t count) { uint32_t countRead; - return inStr->ReadSegments(WriteSegmentFun, this, count, &countRead); + nsresult rv = inStr->ReadSegments(WriteSegmentFun, this, count, &countRead); + NS_ENSURE_SUCCESS(rv, rv); + mBytesRead += countRead; + return NS_OK; } void diff --git a/netwerk/base/nsStreamLoader.h b/netwerk/base/nsStreamLoader.h index 671fc441f..b611a1aed 100644 --- a/netwerk/base/nsStreamLoader.h +++ b/netwerk/base/nsStreamLoader.h @@ -47,6 +47,8 @@ protected: nsCOMPtr mRequest; nsCOMPtr mRequestObserver; + mozilla::Atomic mBytesRead; + // Buffer to accumulate incoming data. We preallocate if contentSize is // available. mozilla::Vector mData;