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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user