diff options
| author | Gopal Krishna Shukla <gshukla@codeaurora.org> | 2016-07-06 08:14:59 +0530 |
|---|---|---|
| committer | Shibin George <shibing@codeaurora.org> | 2016-09-22 04:48:24 +0000 |
| commit | f7abcda5f22cde86666aeedbf1cc2a99b47ec2c2 (patch) | |
| tree | afc141aa8c08f2571c5bdb85da69fac35fe63d80 /core/java/android/view/WindowManagerGlobal.java | |
| parent | 2309b98b254b1fe3b9e4bb86dab28082ec51e3f5 (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.java | 15 |
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; } } |
