From 9ee6bdfe619e02b6ce1d2cd50b10942ef6425d2c Mon Sep 17 00:00:00 2001 From: Hui Shu Date: Mon, 23 May 2016 16:25:01 -0700 Subject: [PATCH] Make getMinimumVersionCode thread safe. The method is not thread safe when there are multiple available-by-default, non-fallback WebView provider packages with different versions, because it sets mMiniumVersionCode multiple times during the for loop, when another thread might be reading the intermediate mMinimumVersionCode. BUG: 28916406 Change-Id: I826c79f108b114c42c7bcd91fc198212c9ab09ad --- .../com/android/server/webkit/WebViewUpdateServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java index e067b66df6ff3..a495c72b13a7b 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -591,13 +591,14 @@ public class WebViewUpdateServiceImpl { return mMinimumVersionCode; } + int minimumVersionCode = -1; for (WebViewProviderInfo provider : mSystemInterface.getWebViewPackages()) { if (provider.availableByDefault && !provider.isFallback) { try { int versionCode = mSystemInterface.getFactoryPackageVersion(provider.packageName); - if (mMinimumVersionCode < 0 || versionCode < mMinimumVersionCode) { - mMinimumVersionCode = versionCode; + if (minimumVersionCode < 0 || versionCode < minimumVersionCode) { + minimumVersionCode = versionCode; } } catch (NameNotFoundException e) { // Safe to ignore. @@ -605,6 +606,7 @@ public class WebViewUpdateServiceImpl { } } + mMinimumVersionCode = minimumVersionCode; return mMinimumVersionCode; } }