[netwerk] Make nsIncrementalStreamLoader's GetNumBytesRead threadsafe.
parent
ea43aa2ecc
commit
d6b281cf01
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue