From 8274aa5394fc42843a5f654a873b50564a623a1e Mon Sep 17 00:00:00 2001 From: Nguyen Van Nam Date: Mon, 30 Mar 2026 00:44:26 +0700 Subject: [PATCH] refactor: non-volatile mutable global test flag can be stale across threads `isEndToEndTestRun` is a mutable global (`object` field) that can be changed at runtime, but it is not `@Volatile` or atomic. Reads/writes from different threads are a data race on JVM memory visibility, so one thread may not observe updates made by another. This can produce inconsistent thread-utils behavior during runtime toggles. Affected files: RenderCoreThreadUtilsConfig.kt Signed-off-by: Nguyen Van Nam --- .../rendercore/thread/utils/RenderCoreThreadUtilsConfig.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/litho-rendercore-thread-utils/src/main/java/com/facebook/rendercore/thread/utils/RenderCoreThreadUtilsConfig.kt b/litho-rendercore-thread-utils/src/main/java/com/facebook/rendercore/thread/utils/RenderCoreThreadUtilsConfig.kt index 3f76608065b..9599ba2f8f2 100644 --- a/litho-rendercore-thread-utils/src/main/java/com/facebook/rendercore/thread/utils/RenderCoreThreadUtilsConfig.kt +++ b/litho-rendercore-thread-utils/src/main/java/com/facebook/rendercore/thread/utils/RenderCoreThreadUtilsConfig.kt @@ -25,5 +25,5 @@ object RenderCoreThreadUtilsConfig { * * system property at startup but can be overridden at runtime. */ - @JvmField var isEndToEndTestRun: Boolean = System.getProperty("IS_TESTING") != null + @Volatile @JvmField var isEndToEndTestRun: Boolean = System.getProperty("IS_TESTING") != null }