diff --git a/gfx/layers/apz/src/AsyncPanZoomController.cpp b/gfx/layers/apz/src/AsyncPanZoomController.cpp index 3c264c1292e5..c1cdf599529a 100644 --- a/gfx/layers/apz/src/AsyncPanZoomController.cpp +++ b/gfx/layers/apz/src/AsyncPanZoomController.cpp @@ -504,16 +504,6 @@ AsyncPanZoomController::AsyncPanZoomController(uint64_t aLayersId, } AsyncPanZoomController::~AsyncPanZoomController() { - PCompositorParent* compositor = GetSharedFrameMetricsCompositor(); - - // Only send the release message if the SharedFrameMetrics has been created. - if (compositor && mSharedFrameMetricsBuffer) { - unused << compositor->SendReleaseSharedCompositorFrameMetrics(mFrameMetrics.GetScrollId(), mAPZCId); - } - - delete mSharedFrameMetricsBuffer; - delete mSharedLock; - MOZ_COUNT_DTOR(AsyncPanZoomController); } @@ -558,6 +548,20 @@ AsyncPanZoomController::Destroy() mLastChild = nullptr; mParent = nullptr; mTreeManager = nullptr; + + PCompositorParent* compositor = GetSharedFrameMetricsCompositor(); + // Only send the release message if the SharedFrameMetrics has been created. + if (compositor && mSharedFrameMetricsBuffer) { + unused << compositor->SendReleaseSharedCompositorFrameMetrics(mFrameMetrics.GetScrollId(), mAPZCId); + } + + { // scope the lock + ReentrantMonitorAutoEnter lock(mMonitor); + delete mSharedFrameMetricsBuffer; + mSharedFrameMetricsBuffer = nullptr; + delete mSharedLock; + mSharedLock = nullptr; + } } bool