diff options
| -rw-r--r-- | core/java/android/os/Parcel.java | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java index 1673ade04150..e784c2669575 100644 --- a/core/java/android/os/Parcel.java +++ b/core/java/android/os/Parcel.java @@ -4499,17 +4499,28 @@ public final class Parcel { public void writeToParcel(Parcel out) { Parcel source = mSource; if (source != null) { - out.appendFrom(source, mPosition, mLength); - } else { - out.writeValue(mObject); + synchronized (source) { + if (mSource != null) { + out.appendFrom(source, mPosition, mLength); + return; + } + } } + + out.writeValue(mObject); } public boolean hasFileDescriptors() { Parcel source = mSource; - return (source != null) - ? source.hasFileDescriptors(mPosition, mLength) - : Parcel.hasFileDescriptors(mObject); + if (source != null) { + synchronized (source) { + if (mSource != null) { + return source.hasFileDescriptors(mPosition, mLength); + } + } + } + + return Parcel.hasFileDescriptors(mObject); } @Override |