From 09546ff639d8838b896da2d6a27ee7d930401e1c Mon Sep 17 00:00:00 2001 From: Fyodor Kupolov Date: Mon, 3 Apr 2017 17:45:50 -0700 Subject: [PATCH] Dump PackageInstaller state outside of mPackages lock Otherwise it may cause a deadlock. Also removed new line before instant attribute. Test: manual Change-Id: I2812a6fe76c638f12728ca6850918eb3a98e3158 Fixes: 36813032 --- .../android/server/pm/PackageManagerService.java | 15 ++++++++------- .../core/java/com/android/server/pm/Settings.java | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6b6adc36ac8bc..b570f6e34ea75 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -20854,13 +20854,6 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); mSettings.dumpRestoredPermissionGrantsLPr(pw, dumpState); } - if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) { - // XXX should handle packageName != null by dumping only install data that - // the given package is involved with. - if (dumpState.onTitlePrinted()) pw.println(); - mInstallerService.dump(new IndentingPrintWriter(pw, " ", 120)); - } - if (!checkin && dumpState.isDumping(DumpState.DUMP_FROZEN) && packageName == null) { // XXX should handle packageName != null by dumping only install data that // the given package is involved with. @@ -20931,6 +20924,14 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } } + + // PackageInstaller should be called outside of mPackages lock + if (!checkin && dumpState.isDumping(DumpState.DUMP_INSTALLS) && packageName == null) { + // XXX should handle packageName != null by dumping only install data that + // the given package is involved with. + if (dumpState.onTitlePrinted()) pw.println(); + mInstallerService.dump(new IndentingPrintWriter(pw, " ", 120)); + } } private void dumpProto(FileDescriptor fd) { diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 6fb056a48f7eb..554deaeb45c74 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4777,7 +4777,7 @@ final class Settings { pw.print(" notLaunched="); pw.print(ps.getNotLaunched(user.id)); pw.print(" enabled="); - pw.println(ps.getEnabled(user.id)); + pw.print(ps.getEnabled(user.id)); pw.print(" instant="); pw.println(ps.getInstantApp(user.id)); String lastDisabledAppCaller = ps.getLastDisabledAppCaller(user.id);