summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2018-06-19 12:38:23 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-06-21 00:58:05 +0000
commit83f827e7d55d5a2bdf4bc01ad9e5cf960b1ccc20 (patch)
treec81e19fa4bcf882c443a07c1f677ebcd1911a117
parent2990141035d87028a7d31d8b0c3fbebc25fc2772 (diff)
downloadbase-83f827e7d55d5a2bdf4bc01ad9e5cf960b1ccc20.tar.gz
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 (cherry picked from commit d4f64f27b0de1c5d21c93b4d73acd05ede28fde2)
-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);