mirror of
https://github.com/roytam1/basilisk55.git
synced 2026-05-26 15:02:46 +00:00
import from UXP: [netwerk] Make nsIncrementalStreamLoader's GetNumBytesRead threadsafe. (efa2f805)
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user