Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83f827e7 authored by Marco Nelissen's avatar Marco Nelissen Committed by android-build-team Robot
Browse files

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 d4f64f27)
parent 29901410
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -323,9 +323,11 @@ public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
        StrictMode.setThreadPolicy(policy);

        try {
            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);