mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
Bug 1520955. Add ref qualifier to DataMutex for more safety. r=froydnj
We lose some sugar but gain some safety. This seems like the right trade. If people want sugar they should use Rust. Differential Revision: https://phabricator.services.mozilla.com/D16918 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
2940e587c4
commit
91c37e95f0
@ -180,7 +180,8 @@ void RenderThread::AddRenderer(wr::WindowId aWindowId,
|
|||||||
|
|
||||||
mRenderers[aWindowId] = std::move(aRenderer);
|
mRenderers[aWindowId] = std::move(aRenderer);
|
||||||
|
|
||||||
mWindowInfos.Lock()->emplace(AsUint64(aWindowId), new WindowInfo());
|
auto windows = mWindowInfos.Lock();
|
||||||
|
windows->emplace(AsUint64(aWindowId), new WindowInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderThread::RemoveRenderer(wr::WindowId aWindowId) {
|
void RenderThread::RemoveRenderer(wr::WindowId aWindowId) {
|
||||||
|
@ -39,9 +39,11 @@ class DataMutex {
|
|||||||
private:
|
private:
|
||||||
class MOZ_STACK_CLASS AutoLock {
|
class MOZ_STACK_CLASS AutoLock {
|
||||||
public:
|
public:
|
||||||
T* operator->() const { return &ref(); }
|
T* operator->() const& { return &ref(); }
|
||||||
|
T* operator->() const&& = delete;
|
||||||
|
|
||||||
T& operator*() const { return ref(); }
|
T& operator*() const& { return ref(); }
|
||||||
|
T& operator*() const&& = delete;
|
||||||
|
|
||||||
// Like RefPtr, make this act like its underlying raw pointer type
|
// Like RefPtr, make this act like its underlying raw pointer type
|
||||||
// whenever it is used in a context where a raw pointer is expected.
|
// whenever it is used in a context where a raw pointer is expected.
|
||||||
@ -50,10 +52,11 @@ class DataMutex {
|
|||||||
// Like RefPtr, don't allow implicit conversion of temporary to raw pointer.
|
// Like RefPtr, don't allow implicit conversion of temporary to raw pointer.
|
||||||
operator T*() const&& = delete;
|
operator T*() const&& = delete;
|
||||||
|
|
||||||
T& ref() const {
|
T& ref() const& {
|
||||||
MOZ_ASSERT(mOwner);
|
MOZ_ASSERT(mOwner);
|
||||||
return mOwner->mValue;
|
return mOwner->mValue;
|
||||||
}
|
}
|
||||||
|
T& ref() const&& = delete;
|
||||||
|
|
||||||
AutoLock(AutoLock&& aOther) : mOwner(aOther.mOwner) {
|
AutoLock(AutoLock&& aOther) : mOwner(aOther.mOwner) {
|
||||||
aOther.mOwner = nullptr;
|
aOther.mOwner = nullptr;
|
||||||
|
Loading…
Reference in New Issue
Block a user