mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-02 22:37:50 +00:00
Bug 1464090 - InputStreamLengthHelper must swap the callback in order to release them on the owning thread, r=mayhemer
This commit is contained in:
parent
c2a7f75146
commit
f6ec0a57a4
@ -50,7 +50,9 @@ public:
|
||||
}
|
||||
|
||||
// pong
|
||||
mCallback(mSize);
|
||||
std::function<void(int64_t aLength)> callback;
|
||||
callback.swap(mCallback);
|
||||
callback(mSize);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -187,7 +189,7 @@ InputStreamLengthHelper::Run()
|
||||
|
||||
// All good!
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
mCallback(length);
|
||||
ExecCallback(length);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -195,7 +197,7 @@ InputStreamLengthHelper::Run()
|
||||
if (rv == NS_BASE_STREAM_CLOSED ||
|
||||
NS_WARN_IF(rv == NS_ERROR_NOT_AVAILABLE) ||
|
||||
NS_WARN_IF(rv != NS_BASE_STREAM_WOULD_BLOCK)) {
|
||||
mCallback(-1);
|
||||
ExecCallback(-1);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
@ -208,7 +210,7 @@ InputStreamLengthHelper::Run()
|
||||
asyncStreamLength->AsyncLengthWait(this,
|
||||
GetCurrentThreadSerialEventTarget());
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
mCallback(-1);
|
||||
ExecCallback(-1);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@ -218,11 +220,11 @@ InputStreamLengthHelper::Run()
|
||||
uint64_t available = 0;
|
||||
nsresult rv = mStream->Available(&available);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
mCallback(-1);
|
||||
ExecCallback(-1);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
mCallback((int64_t)available);
|
||||
ExecCallback((int64_t)available);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -230,12 +232,21 @@ NS_IMETHODIMP
|
||||
InputStreamLengthHelper::OnInputStreamLengthReady(nsIAsyncInputStreamLength* aStream,
|
||||
int64_t aLength)
|
||||
{
|
||||
MOZ_ASSERT(mCallback);
|
||||
mCallback(aLength);
|
||||
mCallback = nullptr;
|
||||
ExecCallback(aLength);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
InputStreamLengthHelper::ExecCallback(int64_t aLength)
|
||||
{
|
||||
MOZ_ASSERT(mCallback);
|
||||
|
||||
std::function<void(int64_t aLength)> callback;
|
||||
callback.swap(mCallback);
|
||||
|
||||
callback(aLength);
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED(InputStreamLengthHelper, Runnable,
|
||||
nsIInputStreamLengthCallback)
|
||||
|
||||
|
@ -42,6 +42,9 @@ private:
|
||||
NS_IMETHOD
|
||||
Run() override;
|
||||
|
||||
void
|
||||
ExecCallback(int64_t aLength);
|
||||
|
||||
nsCOMPtr<nsIInputStream> mStream;
|
||||
std::function<void(int64_t aLength)> mCallback;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user