Files
sousa-gecko/xpcom/threads/StaticBackgroundTaskQueue.cpp
T
Nika Layzell 4e62656d98 Bug 2001490 - Add a StaticBackgroundTaskQueue helper, r=xpcom-reviewers,jstutte
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
2026-03-27 20:37:18 +00:00

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