diff options
author | Moonchild <moonchild@palemoon.org> | 2020-10-23 08:10:01 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2020-10-24 10:38:50 +0000 |
commit | f07d60c09fc0fea2bc614146d13346bc7473b87e (patch) | |
tree | d823fc78c97a0f611ee7ad492c58d84858004461 /netwerk/base/nsIncrementalStreamLoader.cpp | |
parent | d7a05ea9e50f7484d09caf93c554b4be0c9e887d (diff) | |
download | UXP-f07d60c09fc0fea2bc614146d13346bc7473b87e.tar UXP-f07d60c09fc0fea2bc614146d13346bc7473b87e.tar.gz UXP-f07d60c09fc0fea2bc614146d13346bc7473b87e.tar.lz UXP-f07d60c09fc0fea2bc614146d13346bc7473b87e.tar.xz UXP-f07d60c09fc0fea2bc614146d13346bc7473b87e.zip |
[netwerk] Make nsIncrementalStreamLoader's GetNumBytesRead threadsafe.
This prevents a potential race and simplifies the code a bit by keeping the
bytes read separate instead of using mData, which is modified from another
thread from OnDataAvailable.
Relaxed atomics are fine for these, since they don't guard any memory.
Diffstat (limited to 'netwerk/base/nsIncrementalStreamLoader.cpp')
-rw-r--r-- | netwerk/base/nsIncrementalStreamLoader.cpp | 10 |
1 files changed, 4 insertions, 6 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; } |