From 484e832a256269e38cc81f1622ce79525d5f1f39 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Tue, 20 Dec 2022 11:41:15 -0800 Subject: Disable BatteryStatsService watchdog during dumpsys Bug: 262895225 Test: flash the system, take a bugreport Change-Id: Iebecd91d6b3d3ed148c8748ebd11d7eb452d817b --- .../java/com/android/server/am/BatteryStatsService.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 23ed0c4e5f82..5b453b268e79 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -153,6 +153,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub private final Context mContext; private final BatteryExternalStatsWorker mWorker; private final BatteryUsageStatsProvider mBatteryUsageStatsProvider; + private volatile boolean mMonitorEnabled = true; private native void getRailEnergyPowerStats(RailStats railStats); private CharsetDecoder mDecoderStat = StandardCharsets.UTF_8 @@ -481,6 +482,9 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override public void monitor() { + if (!mMonitorEnabled) { + return; + } synchronized (mLock) { } synchronized (mStats) { @@ -2602,6 +2606,19 @@ public final class BatteryStatsService extends IBatteryStats.Stub @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { + // If the monitor() method is already holding a lock on mStats, no harm done: we will + // just wait for mStats in the dumpUnmonitored method below. In fact, we would want + // Watchdog to catch the service in the act in that situation. We just don't want the + // dump method itself to be blamed for holding the lock for too long. + mMonitorEnabled = false; + try { + dumpUnmonitored(fd, pw, args); + } finally { + mMonitorEnabled = true; + } + } + + private void dumpUnmonitored(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpAndUsageStatsPermission(mContext, TAG, pw)) return; int flags = 0; -- cgit v1.2.3-59-g8ed1b