gecko-dev/dom/quota/DirectoryLockInlines.h
Jan Varga 602d21513c Bug 1883353 - Require to always drop directory locks explicitly; r=dom-storage-reviewers,jari
Until now, directory locks were dropped when the last strong reference was
removed or after calling Drop explicitly. The dependency on ref-counting makes
it less obvious when directory locks are dropped for real and it's also
difficult to release them asynchronously eventually. This patch removes the
directory lock unregistration from the destructor, so from now on, directory
locks must be always dropped explicitly.

Differential Revision: https://phabricator.services.mozilla.com/D197294
2024-06-14 07:21:24 +00:00

61 lines
1.4 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/. */
#ifndef DOM_QUOTA_DIRECTORYLOCKINLINES_H_
#define DOM_QUOTA_DIRECTORYLOCKINLINES_H_
#ifndef DOM_QUOTA_DIRECTORYLOCK_H_
# error Must include DirectoryLock.h first
#endif
#include "mozilla/RefPtr.h"
namespace mozilla::dom::quota {
template <typename T>
constexpr void SafeDropDirectoryLock(RefPtr<T>& aDirectoryLock) {
if (!aDirectoryLock) {
return;
}
aDirectoryLock->Drop();
aDirectoryLock = nullptr;
}
template <typename T>
constexpr void DropDirectoryLock(RefPtr<T>& aDirectoryLock) {
MOZ_ASSERT(aDirectoryLock);
aDirectoryLock->Drop();
aDirectoryLock = nullptr;
}
template <typename T>
constexpr void SafeDropDirectoryLockIfNotDropped(RefPtr<T>& aDirectoryLock) {
if (!aDirectoryLock) {
return;
}
if (!aDirectoryLock->Dropped()) {
aDirectoryLock->Drop();
}
aDirectoryLock = nullptr;
}
template <typename T>
constexpr void DropDirectoryLockIfNotDropped(RefPtr<T>& aDirectoryLock) {
MOZ_ASSERT(aDirectoryLock);
if (!aDirectoryLock->Dropped()) {
aDirectoryLock->Drop();
}
aDirectoryLock = nullptr;
}
} // namespace mozilla::dom::quota
#endif // DOM_QUOTA_DIRECTORYLOCKINLINES_H_