From b36ed85c4025ca26edf0e776d2603e7e61c618ca Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Thu, 29 Nov 2012 11:42:11 -0800 Subject: [PATCH] trigger kernel blocked stack trace on system server watchdog Bug b/7638530 may be caused by a kernel deadlock when killing processes under low memory conditions. Write to /proc/sysrq-trigger to get a kernel log of blocked tasks before killing the system server. Bug: 7638530 Change-Id: I60df324ad4affdadbf13650099dc4dfb38722420 --- services/java/com/android/server/Watchdog.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/services/java/com/android/server/Watchdog.java b/services/java/com/android/server/Watchdog.java index 8bbf923adaead..b2a8ad834dc45 100644 --- a/services/java/com/android/server/Watchdog.java +++ b/services/java/com/android/server/Watchdog.java @@ -39,6 +39,8 @@ import android.util.Log; import android.util.Slog; import java.io.File; +import java.io.FileWriter; +import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; @@ -439,6 +441,16 @@ public class Watchdog extends Thread { dumpKernelStackTraces(); } + // Trigger the kernel to dump all blocked threads to the kernel log + try { + FileWriter sysrq_trigger = new FileWriter("/proc/sysrq-trigger"); + sysrq_trigger.write("w"); + sysrq_trigger.close(); + } catch (IOException e) { + Slog.e(TAG, "Failed to write to /proc/sysrq-trigger"); + Slog.e(TAG, e.getMessage()); + } + // Try to add the error to the dropbox, but assuming that the ActivityManager // itself may be deadlocked. (which has happened, causing this statement to // deadlock and the watchdog as a whole to be ineffective)