diff --git a/core/java/com/android/internal/os/KernelWakelockReader.java b/core/java/com/android/internal/os/KernelWakelockReader.java index e595db384cb98..c4168141f1841 100644 --- a/core/java/com/android/internal/os/KernelWakelockReader.java +++ b/core/java/com/android/internal/os/KernelWakelockReader.java @@ -78,13 +78,16 @@ public class KernelWakelockReader { boolean useSystemSuspend = (new File(sSysClassWakeupDir)).exists(); if (useSystemSuspend) { - // Get both kernel and native wakelock stats from SystemSuspend - updateVersion(staleStats); - if (getWakelockStatsFromSystemSuspend(staleStats) == null) { - Slog.w(TAG, "Failed to get wakelock stats from SystemSuspend"); - return null; + // static read/write lock protection for sKernelWakelockUpdateVersion + synchronized (KernelWakelockReader.class) { + // Get both kernel and native wakelock stats from SystemSuspend + updateVersion(staleStats); + if (getWakelockStatsFromSystemSuspend(staleStats) == null) { + Slog.w(TAG, "Failed to get wakelock stats from SystemSuspend"); + return null; + } + return removeOldStats(staleStats); } - return removeOldStats(staleStats); } else { Arrays.fill(mKernelWakelockBuffer, (byte) 0); int len = 0; @@ -141,14 +144,17 @@ public class KernelWakelockReader { } } - updateVersion(staleStats); - // Get native wakelock stats from SystemSuspend - if (getWakelockStatsFromSystemSuspend(staleStats) == null) { - Slog.w(TAG, "Failed to get Native wakelock stats from SystemSuspend"); + // static read/write lock protection for sKernelWakelockUpdateVersion + synchronized (KernelWakelockReader.class) { + updateVersion(staleStats); + // Get native wakelock stats from SystemSuspend + if (getWakelockStatsFromSystemSuspend(staleStats) == null) { + Slog.w(TAG, "Failed to get Native wakelock stats from SystemSuspend"); + } + // Get kernel wakelock stats + parseProcWakelocks(mKernelWakelockBuffer, len, wakeup_sources, staleStats); + return removeOldStats(staleStats); } - // Get kernel wakelock stats - parseProcWakelocks(mKernelWakelockBuffer, len, wakeup_sources, staleStats); - return removeOldStats(staleStats); } }