summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Sharkey <jsharkey@android.com> 2017-01-16 20:58:40 -0700
committer Jeff Sharkey <jsharkey@android.com> 2017-01-16 20:58:43 -0700
commit7d25fafea7b313cf3eee5bbf4eb959f4986ffce4 (patch)
treea315ca88c0c1bf79d7eeb11c22d4d28904057229
parenteda5d5183e5bc0fc63027b77b7dfd7d407bf22d6 (diff)
Invalidate installd when mounts change.
Test: builds, boots, common operations work Bug: 34249218 Change-Id: Ia893b43dd7ff6078d91df50a9e8d644583617982
-rw-r--r--services/core/java/com/android/server/pm/Installer.java9
-rw-r--r--services/usage/java/com/android/server/usage/StorageStatsService.java26
2 files changed, 33 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 98249dd12634..de0d2a3db4ef 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -415,6 +415,15 @@ public class Installer extends SystemService {
}
}
+ public void invalidateMounts() throws InstallerException {
+ if (!checkBeforeRemote()) return;
+ try {
+ mInstalld.invalidateMounts();
+ } catch (Exception e) {
+ throw InstallerException.from(e);
+ }
+ }
+
private static void assertValidInstructionSet(String instructionSet)
throws InstallerException {
for (String abi : Build.SUPPORTED_ABIS) {
diff --git a/services/usage/java/com/android/server/usage/StorageStatsService.java b/services/usage/java/com/android/server/usage/StorageStatsService.java
index 3be04d451cca..68765b643c66 100644
--- a/services/usage/java/com/android/server/usage/StorageStatsService.java
+++ b/services/usage/java/com/android/server/usage/StorageStatsService.java
@@ -31,9 +31,10 @@ import android.os.Environment;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.StorageEventListener;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
-import android.util.Log;
+import android.util.Slog;
import com.android.internal.util.ArrayUtils;
import com.android.server.SystemService;
@@ -66,6 +67,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub {
private final UserManager mUser;
private final PackageManager mPackage;
private final StorageManager mStorage;
+
private final Installer mInstaller;
public StorageStatsService(Context context) {
@@ -74,8 +76,28 @@ public class StorageStatsService extends IStorageStatsManager.Stub {
mUser = context.getSystemService(UserManager.class);
mPackage = context.getSystemService(PackageManager.class);
mStorage = context.getSystemService(StorageManager.class);
+
mInstaller = new Installer(context);
mInstaller.onStart();
+ invalidateMounts();
+
+ mStorage.registerListener(new StorageEventListener() {
+ @Override
+ public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) {
+ if ((vol.type == VolumeInfo.TYPE_PRIVATE)
+ && (newState == VolumeInfo.STATE_MOUNTED)) {
+ invalidateMounts();
+ }
+ }
+ });
+ }
+
+ private void invalidateMounts() {
+ try {
+ mInstaller.invalidateMounts();
+ } catch (InstallerException e) {
+ Slog.wtf(TAG, "Failed to invalidate mounts", e);
+ }
}
private void enforcePermission(int callingUid, String callingPackage) {
@@ -242,7 +264,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub {
private static void checkEquals(String msg, long expected, long actual) {
if (expected != actual) {
- Log.e(TAG, msg + " expected " + expected + " actual " + actual);
+ Slog.e(TAG, msg + " expected " + expected + " actual " + actual);
}
}