diff options
| -rw-r--r-- | core/java/android/os/ShellCallback.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerShellCommand.java | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/core/java/android/os/ShellCallback.java b/core/java/android/os/ShellCallback.java index 632f6c8694ce..be9fb89649d0 100644 --- a/core/java/android/os/ShellCallback.java +++ b/core/java/android/os/ShellCallback.java @@ -102,6 +102,10 @@ public class ShellCallback implements Parcelable { } } + public IBinder getShellCallbackBinder() { + return mShellCallback.asBinder(); + } + ShellCallback(Parcel in) { mLocal = false; mShellCallback = IShellCallback.Stub.asInterface(in.readStrongBinder()); diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 149e3baa90e7..af8990778773 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -1690,7 +1690,14 @@ final class ActivityManagerShellCommand extends ShellCommand { pw.println("Hanging the system..."); pw.flush(); - mInterface.hang(new Binder(), allowRestart); + try { + mInterface.hang(getShellCallback().getShellCallbackBinder(), allowRestart); + } catch (NullPointerException e) { + pw.println("Hanging failed, since caller " + Binder.getCallingPid() + + " did not provide a ShellCallback!"); + pw.flush(); + return 1; + } return 0; } |