Bug 1418791 - Ensure mSnapshot access is protected by mutex, r?dvander draft
authorpeter chang <pchang@mozilla.com>
Tue, 05 Dec 2017 15:35:16 +0800
changeset 707379 eb8d27d363927ca4521fe73cbc1732d5bfa94fda
parent 707249 f2cf6d1473808039be5ecd8727cc3791d5d7d2d4
child 742931 2e3ae796c7e449a456183b26fb526b253d49bb4f
push id92104
push userbmo:howareyou322@gmail.com
push dateTue, 05 Dec 2017 07:41:12 +0000
reviewersdvander
bugs1418791
milestone59.0a1
Bug 1418791 - Ensure mSnapshot access is protected by mutex, r?dvander MozReview-Commit-ID: 3NPzv6VftxZ
gfx/2d/DrawTargetD2D1.cpp
--- a/gfx/2d/DrawTargetD2D1.cpp
+++ b/gfx/2d/DrawTargetD2D1.cpp
@@ -41,16 +41,17 @@ StaticRefPtr<ID2D1Factory1> DrawTargetD2
 
 RefPtr<ID2D1Factory1> D2DFactory()
 {
   return DrawTargetD2D1::factory();
 }
 
 DrawTargetD2D1::DrawTargetD2D1()
   : mPushedLayers(1)
+  , mSnapshotLock(make_shared<Mutex>("DrawTargetD2D1::mSnapshotLock"))
   , mUsedCommandListsSincePurge(0)
   , mComplexBlendsWithListInList(0)
   , mDeviceSeq(0)
 {
 }
 
 DrawTargetD2D1::~DrawTargetD2D1()
 {
@@ -86,19 +87,17 @@ DrawTargetD2D1::~DrawTargetD2D1()
        iter != mDependingOnTargets.end(); iter++) {
     (*iter)->mDependentTargets.erase(this);
   }
 }
 
 already_AddRefed<SourceSurface>
 DrawTargetD2D1::Snapshot()
 {
-  if (!mSnapshotLock) {
-    mSnapshotLock = make_shared<Mutex>("DrawTargetD2D1::mSnapshotLock");
-  }
+  MutexAutoLock lock(*mSnapshotLock);
   if (mSnapshot) {
     RefPtr<SourceSurface> snapshot(mSnapshot);
     return snapshot.forget();
   }
   PopAllClips();
 
   Flush();