Bug 1734700 - Use the IO event queue for IOUtils background tasks, r=KrisWright

Differential Revision: https://phabricator.services.mozilla.com/D128311
This commit is contained in:
Nika Layzell 2021-10-15 14:17:42 +00:00
Родитель 194424d90e
Коммит 71fbec519e
1 изменённых файлов: 14 добавлений и 8 удалений

Просмотреть файл

@ -1597,14 +1597,20 @@ template <typename OkT, typename Fn>
RefPtr<IOUtils::IOPromise<OkT>> IOUtils::EventQueue::Dispatch(Fn aFunc) {
MOZ_RELEASE_ASSERT(mBackgroundEventTarget);
return InvokeAsync(
mBackgroundEventTarget, __func__, [func = std::move(aFunc)]() {
Result<OkT, IOError> result = func();
if (result.isErr()) {
return IOPromise<OkT>::CreateAndReject(result.unwrapErr(), __func__);
}
return IOPromise<OkT>::CreateAndResolve(result.unwrap(), __func__);
});
auto promise =
MakeRefPtr<typename IOUtils::IOPromise<OkT>::Private>(__func__);
mBackgroundEventTarget->Dispatch(
NS_NewRunnableFunction("IOUtils::EventQueue::Dispatch",
[promise, func = std::move(aFunc)] {
Result<OkT, IOError> result = func();
if (result.isErr()) {
promise->Reject(result.unwrapErr(), __func__);
} else {
promise->Resolve(result.unwrap(), __func__);
}
}),
NS_DISPATCH_EVENT_MAY_BLOCK);
return promise;
};
Result<already_AddRefed<nsIAsyncShutdownClient>, nsresult>