summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Marco Nelissen <marcone@google.com> 2018-06-19 12:38:23 -0700
committer Marco Nelissen <marcone@google.com> 2018-06-20 07:42:05 -0700
commitd4f64f27b0de1c5d21c93b4d73acd05ede28fde2 (patch)
tree3c7016e9d4d7e0b2fa9e8dcab01edba76edb14fa
parentc5901f5a06884da28d89bf79d54a1d729acb8dec (diff)
Fix race condition in MediaHTTPConnection
getSize() and getMIMEType() rely on seekTo() having completed. If seekTo() was called on a different thread, for example because NuCachedSource2 was doing reads on a background thread, getSize() could return -1 if it was called after connection was established, but before the response had been parsed. Bug: 110230427 Test: manual Change-Id: I469b47e025f1c7a7ef3123d3347668f0541e6f2d
-rw-r--r--media/java/android/media/MediaHTTPConnection.java10
1 files changed, 6 insertions, 4 deletions
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
index aae1f517eeaf..6bf52bdb60d3 100644
--- a/media/java/android/media/MediaHTTPConnection.java
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -323,8 +323,10 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
StrictMode.setThreadPolicy(policy);
try {
- if (offset != mCurrentOffset) {
- seekTo(offset);
+ synchronized(this) {
+ if (offset != mCurrentOffset) {
+ seekTo(offset);
+ }
}
int n = mInputStream.read(data, 0, size);
@@ -366,7 +368,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
}
@Override
- public long getSize() {
+ public synchronized long getSize() {
if (mConnection == null) {
try {
seekTo(0);
@@ -379,7 +381,7 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
}
@Override
- public String getMIMEType() {
+ public synchronized String getMIMEType() {
if (mConnection == null) {
try {
seekTo(0);