summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--netwerk/base/nsIncrementalStreamLoader.cpp10
-rw-r--r--netwerk/base/nsIncrementalStreamLoader.h5
-rw-r--r--netwerk/base/nsStreamLoader.cpp7
-rw-r--r--netwerk/base/nsStreamLoader.h2
4 files changed, 14 insertions, 10 deletions
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 <limits>
-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<uint8_t, 0> 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<uint32_t, mozilla::Relaxed> 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<nsIRequest> mRequest;
nsCOMPtr<nsIRequestObserver> mRequestObserver;
+ mozilla::Atomic<uint32_t, mozilla::Relaxed> mBytesRead;
+
// Buffer to accumulate incoming data. We preallocate if contentSize is
// available.
mozilla::Vector<uint8_t, 0> mData;