Fix issue #1930911: Crash in system process

Ensure that we do all the work for removing a window's view
hierarchy in that window's thread.

Change-Id: Ib7c1701aee6b541b75fd1a680f6987f959f2ba88
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index 398abf8..dba2e04 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1841,7 +1841,7 @@
             }
         } break;
         case DIE:
-            dispatchDetachedFromWindow();
+            doDie();
             break;
         case DISPATCH_KEY_FROM_IME: {
             if (LOCAL_LOGV) Log.v(
@@ -2520,6 +2520,14 @@
     }
 
     public void die(boolean immediate) {
+        if (immediate) {
+            doDie();
+        } else {
+            sendEmptyMessage(DIE);
+        }
+    }
+
+    void doDie() {
         checkThread();
         if (Config.LOGV) Log.v("ViewRoot", "DIE in " + this + " of " + mSurface);
         synchronized (this) {
@@ -2543,11 +2551,7 @@
             }
             if (mAdded) {
                 mAdded = false;
-                if (immediate) {
-                    dispatchDetachedFromWindow();
-                } else if (mView != null) {
-                    sendEmptyMessage(DIE);
-                }
+                dispatchDetachedFromWindow();
             }
         }
     }