diff options
| author | 2018-06-19 12:38:23 -0700 | |
|---|---|---|
| committer | 2018-06-20 07:42:05 -0700 | |
| commit | d4f64f27b0de1c5d21c93b4d73acd05ede28fde2 (patch) | |
| tree | 3c7016e9d4d7e0b2fa9e8dcab01edba76edb14fa | |
| parent | c5901f5a06884da28d89bf79d54a1d729acb8dec (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.java | 10 |
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); |