summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Parcel.java23
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