summaryrefslogtreecommitdiff
path: root/core/java/android/view/WindowManagerGlobal.java
diff options
context:
space:
mode:
authorGopal Krishna Shukla <gshukla@codeaurora.org>2016-07-06 08:14:59 +0530
committerShibin George <shibing@codeaurora.org>2016-09-22 04:48:24 +0000
commitf7abcda5f22cde86666aeedbf1cc2a99b47ec2c2 (patch)
treeafc141aa8c08f2571c5bdb85da69fac35fe63d80 /core/java/android/view/WindowManagerGlobal.java
parent2309b98b254b1fe3b9e4bb86dab28082ec51e3f5 (diff)
Provide synchronization to setview to avoid NPE
If setView() will be called from two different threads then mView property of a View object may have inconsistent value. For instance, setView() may set mView to null causing NullPointerException. Synchronize root.setView() as well to avoid this. Change-Id: I5f9cf47ece5d4aca575bd8644ecfcee0ed43d843
Diffstat (limited to 'core/java/android/view/WindowManagerGlobal.java')
-rw-r--r--core/java/android/view/WindowManagerGlobal.java15
1 files changed, 6 insertions, 9 deletions
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 11734d31388e..830df990f205 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -335,20 +335,17 @@ public final class WindowManagerGlobal {
mViews.add(view);
mRoots.add(root);
mParams.add(wparams);
- }
- // do this last because it fires off messages to start doing things
- try {
- root.setView(view, wparams, panelParentView);
- } catch (RuntimeException e) {
- // BadTokenException or InvalidDisplayException, clean up.
- synchronized (mLock) {
- final int index = findViewLocked(view, false);
+ // do this last because it fires off messages to start doing things
+ try {
+ root.setView(view, wparams, panelParentView);
+ } catch (RuntimeException e) {
+ // BadTokenException or InvalidDisplayException, clean up.
if (index >= 0) {
removeViewLocked(index, true);
}
+ throw e;
}
- throw e;
}
}