зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
a04c002ee0
Коммит
1ca8cf637b
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче