From 929de2e3bf38eb8ea98aa4e537a41296bd451501 Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Thu, 9 Sep 2021 06:30:11 -0700 Subject: [PATCH] RTM must to acquire lock before called IsMergedUnsafe (flutter/engine#28514) I was able to reproduce this on a windows machine with 10000 runs of this test semi-consistently prior to this fix. After this fix it seems to have stopped happening. Fixes: https://github.com/flutter/flutter/issues/88464 --- engine/src/flutter/fml/raster_thread_merger.cc | 4 +++- engine/src/flutter/fml/raster_thread_merger.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/engine/src/flutter/fml/raster_thread_merger.cc b/engine/src/flutter/fml/raster_thread_merger.cc index 6110e683bfb..88b33dc1e77 100644 --- a/engine/src/flutter/fml/raster_thread_merger.cc +++ b/engine/src/flutter/fml/raster_thread_merger.cc @@ -91,7 +91,9 @@ bool RasterThreadMerger::IsOnPlatformThread() const { return MessageLoop::GetCurrentTaskQueueId() == platform_queue_id_; } -bool RasterThreadMerger::IsOnRasterizingThread() const { +bool RasterThreadMerger::IsOnRasterizingThread() { + std::scoped_lock lock(mutex_); + if (IsMergedUnSafe()) { return IsOnPlatformThread(); } else { diff --git a/engine/src/flutter/fml/raster_thread_merger.h b/engine/src/flutter/fml/raster_thread_merger.h index d3babbfe5d1..3ad4a4e27da 100644 --- a/engine/src/flutter/fml/raster_thread_merger.h +++ b/engine/src/flutter/fml/raster_thread_merger.h @@ -89,7 +89,7 @@ class RasterThreadMerger // Returns true if the current thread owns rasterizing. // When the threads are merged, platform thread owns rasterizing. // When un-merged, raster thread owns rasterizing. - bool IsOnRasterizingThread() const; + bool IsOnRasterizingThread(); // Returns true if the current thread is the platform thread. bool IsOnPlatformThread() const;