diff --git a/library/src/androidTest/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndexTest.java b/library/src/androidTest/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndexTest.java index dd4de7cce2..71e5a5b6d0 100644 --- a/library/src/androidTest/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndexTest.java +++ b/library/src/androidTest/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndexTest.java @@ -181,7 +181,7 @@ public class CachedContentIndexTest extends InstrumentationTestCase { // Assert file content is different FileInputStream fis1 = new FileInputStream(file1); FileInputStream fis2 = new FileInputStream(file2); - for (int b; (b = fis1.read()) == fis2.read();) { + for (int b; (b = fis1.read()) == fis2.read(); ) { assertTrue(b != -1); } @@ -205,6 +205,12 @@ public class CachedContentIndexTest extends InstrumentationTestCase { // Non encrypted index file can be read even when encryption key provided. assertStoredAndLoadedEqual(new CachedContentIndex(cacheDir), new CachedContentIndex(cacheDir, key)); + + // Test multiple store() calls + CachedContentIndex index = new CachedContentIndex(cacheDir, key); + index.addNew(new CachedContent(15, "key3", 110)); + index.store(); + assertStoredAndLoadedEqual(index, new CachedContentIndex(cacheDir, key)); } private void assertStoredAndLoadedEqual(CachedContentIndex index, CachedContentIndex index2) diff --git a/library/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java b/library/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java index 9e38dabc31..2ec4099e01 100644 --- a/library/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java +++ b/library/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContentIndex.java @@ -302,6 +302,9 @@ import javax.crypto.spec.SecretKeySpec; } output.writeInt(hashCode); atomicFile.endWrite(output); + // Avoid calling close twice. Duplicate CipherOutputStream.close calls did + // not used to be no-ops: https://android-review.googlesource.com/#/c/272799/ + output = null; } catch (IOException e) { throw new CacheException(e); } finally { diff --git a/library/src/main/java/com/google/android/exoplayer2/util/ReusableBufferedOutputStream.java b/library/src/main/java/com/google/android/exoplayer2/util/ReusableBufferedOutputStream.java index a3d1d4d02e..1db3d2c1f4 100644 --- a/library/src/main/java/com/google/android/exoplayer2/util/ReusableBufferedOutputStream.java +++ b/library/src/main/java/com/google/android/exoplayer2/util/ReusableBufferedOutputStream.java @@ -67,6 +67,7 @@ public final class ReusableBufferedOutputStream extends BufferedOutputStream { public void reset(OutputStream out) { Assertions.checkState(closed); this.out = out; + count = 0; closed = false; } }