Bug 1794644 - Part 2: Mark `StaticRWLock` as `MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS`, r=xpcom-reviewers,kmag

The original use in rlbox which made having this annotation impossible is no
longer necessary as it was removed in the previous part.

Differential Revision: https://phabricator.services.mozilla.com/D159085
This commit is contained in:
Nika Layzell 2022-10-14 14:20:35 +00:00
Родитель a04c002ee0
Коммит 1ca8cf637b
3 изменённых файлов: 9 добавлений и 19 удалений

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

@ -81,7 +81,7 @@ bool mozHunspellFileMgrHost::GetLine(std::string& aResult) {
/* static */
uint32_t mozHunspellCallbacks::sCurrentFreshId = 0;
/* static */
mozilla::detail::StaticRWLock mozHunspellCallbacks::sFileMgrMapLock;
mozilla::StaticRWLock mozHunspellCallbacks::sFileMgrMapLock;
/* static */
std::map<uint32_t, std::unique_ptr<mozHunspellFileMgrHost>>
mozHunspellCallbacks::sFileMgrMap;
@ -90,13 +90,13 @@ std::set<nsCString> mozHunspellCallbacks::sFileMgrAllowList;
/* static */
void mozHunspellCallbacks::AllowFile(const nsCString& aFilename) {
mozilla::detail::StaticAutoWriteLock lock(sFileMgrMapLock);
mozilla::StaticAutoWriteLock lock(sFileMgrMapLock);
sFileMgrAllowList.insert(aFilename);
}
/* static */
void mozHunspellCallbacks::Clear() {
mozilla::detail::StaticAutoWriteLock lock(sFileMgrMapLock);
mozilla::StaticAutoWriteLock lock(sFileMgrMapLock);
sCurrentFreshId = 0;
sFileMgrMap.clear();
sFileMgrAllowList.clear();
@ -106,7 +106,7 @@ void mozHunspellCallbacks::Clear() {
tainted_hunspell<uint32_t> mozHunspellCallbacks::CreateFilemgr(
rlbox_sandbox_hunspell& aSandbox,
tainted_hunspell<const char*> t_aFilename) {
mozilla::detail::StaticAutoWriteLock lock(sFileMgrMapLock);
mozilla::StaticAutoWriteLock lock(sFileMgrMapLock);
return t_aFilename.copy_and_verify_string(
[&](std::unique_ptr<char[]> aFilename) {
@ -146,7 +146,7 @@ uint32_t mozHunspellCallbacks::GetFreshId() {
/* static */
mozHunspellFileMgrHost& mozHunspellCallbacks::GetMozHunspellFileMgrHost(
tainted_hunspell<uint32_t> t_aFd) {
mozilla::detail::StaticAutoReadLock lock(sFileMgrMapLock);
mozilla::StaticAutoReadLock lock(sFileMgrMapLock);
uint32_t aFd = t_aFd.copy_and_verify([](uint32_t aFd) { return aFd; });
auto iter = sFileMgrMap.find(aFd);
MOZ_RELEASE_ASSERT(iter != sFileMgrMap.end());
@ -193,7 +193,7 @@ tainted_hunspell<int> mozHunspellCallbacks::GetLineNum(
/* static */
void mozHunspellCallbacks::DestructFilemgr(rlbox_sandbox_hunspell& aSandbox,
tainted_hunspell<uint32_t> t_aFd) {
mozilla::detail::StaticAutoWriteLock lock(sFileMgrMapLock);
mozilla::StaticAutoWriteLock lock(sFileMgrMapLock);
uint32_t aFd = t_aFd.copy_and_verify([](uint32_t aFd) { return aFd; });
auto iter = sFileMgrMap.find(aFd);

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

@ -102,7 +102,7 @@ class mozHunspellCallbacks {
/**
* Reader-writer lock for the sFileMgrMap
*/
static mozilla::detail::StaticRWLock sFileMgrMapLock;
static mozilla::StaticRWLock sFileMgrMapLock;
/**
* Tracks the next possibly unused id for sFileMgrMap
*/

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

@ -11,6 +11,7 @@
#include "mozilla/Assertions.h"
#include "mozilla/Atomics.h"
#include "mozilla/Attributes.h"
#include "mozilla/BlockingResourceBase.h"
#include "mozilla/PlatformRWLock.h"
#include "mozilla/ThreadSafety.h"
@ -181,16 +182,7 @@ typedef BaseAutoTryWriteLock<RWLock> AutoTryWriteLock;
// calls to WriteLock() and WriteUnlock().
typedef BaseAutoWriteLock<RWLock> AutoWriteLock;
// XXX: normally we would define StaticRWLock as
// MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS, but the contexts in which it
// is used (e.g. member variables in a third-party library) are non-trivial
// to modify to properly declare everything at static scope. As those
// third-party libraries are the only clients, put it behind the detail
// namespace to discourage other (possibly erroneous) uses from popping up.
namespace detail {
class MOZ_CAPABILITY StaticRWLock {
class MOZ_ONLY_USED_TO_AVOID_STATIC_CONSTRUCTORS MOZ_CAPABILITY StaticRWLock {
public:
// In debug builds, check that mLock is initialized for us as we expect by
// the compiler. In non-debug builds, don't declare a constructor so that
@ -245,8 +237,6 @@ typedef BaseAutoReadLock<StaticRWLock> StaticAutoReadLock;
typedef BaseAutoTryWriteLock<StaticRWLock> StaticAutoTryWriteLock;
typedef BaseAutoWriteLock<StaticRWLock> StaticAutoWriteLock;
} // namespace detail
} // namespace mozilla
#endif // mozilla_RWLock_h