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
This commit is contained in:
Hui Shu
2016-05-23 16:25:01 -07:00
parent 520eca5ba3
commit 9ee6bdfe61

View File

@@ -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;
}
}