diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index cd9a4e72672fd..71e7358701fd0 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -5390,6 +5390,8 @@ public final class Settings { mHandler.removeMessages(userId); mWriteScheduled.delete(userId); + mPermissionDataProvider.writeLegacyPermissionStateTEMP(); + int version = mVersions.get(userId, INITIAL_VERSION); String fingerprint = mFingerprints.get(userId); diff --git a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java index 0e790b1899edf..46e4e59bb15bd 100644 --- a/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java +++ b/services/core/java/com/android/server/pm/permission/LegacyPermissionDataProvider.java @@ -61,4 +61,14 @@ public interface LegacyPermissionDataProvider { */ @NonNull int[] getGidsForUid(int uid); + + /** + * This method should be in PermissionManagerServiceInternal, however it is made available here + * as well to avoid serious performance regression in writePermissionSettings(), which seems to + * be a hot spot and we should delay calling this method until wre are actually writing the + * file, instead of every time an async write is requested. + * + * @see PermissionManagerServiceInternal#writeLegacyPermissionStateTEMP() + */ + void writeLegacyPermissionStateTEMP(); }