This patch introduces a new static helper, StaticBackgroundTaskQueue, which provides a threadsafe static, usable for NS_CreateBackgroundTaskQueue, which will be cleared to nullptr when the background task queue is killed during XPCOM shutdown. This approach may also be extensible in the future to virtual thread pools, potentially replacing SharedThreadPool for some use-cases. Differential Revision: https://phabricator.services.mozilla.com/D273517
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/StaticBackgroundTaskQueue.h"
|
|
|
|
#include "nsThreadUtils.h"
|
|
|
|
namespace mozilla {
|
|
|
|
StaticBackgroundTaskQueue::StaticBackgroundTaskQueue(StaticString aName)
|
|
: mImpl(aName) {}
|
|
|
|
already_AddRefed<nsISerialEventTarget> StaticBackgroundTaskQueue::Get() {
|
|
OffTheBooksMutexAutoLock lock(mImpl->mMutex);
|
|
return do_AddRef(mImpl->mQueue);
|
|
}
|
|
|
|
NS_IMPL_QUERY_INTERFACE(StaticBackgroundTaskQueue::Impl, nsITargetShutdownTask)
|
|
|
|
StaticBackgroundTaskQueue::Impl::Impl(StaticString aName) : mMutex(aName) {
|
|
nsCOMPtr<nsISerialEventTarget> queue;
|
|
nsresult rv = NS_CreateBackgroundTaskQueue(aName, getter_AddRefs(queue));
|
|
NS_ENSURE_SUCCESS_VOID(rv);
|
|
rv = queue->RegisterShutdownTask(this);
|
|
NS_ENSURE_SUCCESS_VOID(rv);
|
|
mQueue = queue.forget();
|
|
}
|
|
|
|
void StaticBackgroundTaskQueue::Impl::TargetShutdown() {
|
|
OffTheBooksMutexAutoLock lock(mMutex);
|
|
mQueue = nullptr;
|
|
}
|
|
|
|
} // namespace mozilla
|