import from UXP: [netwerk] Make nsIncrementalStreamLoader's GetNumBytesRead threadsafe. (efa2f805)

This commit is contained in:
2022-04-18 13:11:19 +08:00
parent 974c68690d
commit ea2d9867d7
4 changed files with 14 additions and 10 deletions
+4 -6
View File
@@ -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;
}
+3 -2
View File
@@ -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__
+5 -2
View File
@@ -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
+2
View File
@@ -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;