Commit b3d258b6 by olly Committed by Oliver Woodman

Fix race condition in DownloadHelper

Sending MESSAGE_PREPARE_SOURCE should happen last in the constructor.
It was previously happening before initialization finished (and in
particular before pendingMediaPeriods was instantiated).

Issue: #6146
PiperOrigin-RevId: 257158275
parent 92fb654a
...@@ -809,10 +809,10 @@ public final class DownloadHelper { ...@@ -809,10 +809,10 @@ public final class DownloadHelper {
private final MediaSource mediaSource; private final MediaSource mediaSource;
private final DownloadHelper downloadHelper; private final DownloadHelper downloadHelper;
private final Allocator allocator; private final Allocator allocator;
private final ArrayList<MediaPeriod> pendingMediaPeriods;
private final Handler downloadHelperHandler;
private final HandlerThread mediaSourceThread; private final HandlerThread mediaSourceThread;
private final Handler mediaSourceHandler; private final Handler mediaSourceHandler;
private final Handler downloadHelperHandler;
private final ArrayList<MediaPeriod> pendingMediaPeriods;
@Nullable public Object manifest; @Nullable public Object manifest;
public @MonotonicNonNull Timeline timeline; public @MonotonicNonNull Timeline timeline;
...@@ -824,6 +824,7 @@ public final class DownloadHelper { ...@@ -824,6 +824,7 @@ public final class DownloadHelper {
this.mediaSource = mediaSource; this.mediaSource = mediaSource;
this.downloadHelper = downloadHelper; this.downloadHelper = downloadHelper;
allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE); allocator = new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE);
pendingMediaPeriods = new ArrayList<>();
@SuppressWarnings("methodref.receiver.bound.invalid") @SuppressWarnings("methodref.receiver.bound.invalid")
Handler downloadThreadHandler = Util.createHandler(this::handleDownloadHelperCallbackMessage); Handler downloadThreadHandler = Util.createHandler(this::handleDownloadHelperCallbackMessage);
this.downloadHelperHandler = downloadThreadHandler; this.downloadHelperHandler = downloadThreadHandler;
...@@ -831,7 +832,6 @@ public final class DownloadHelper { ...@@ -831,7 +832,6 @@ public final class DownloadHelper {
mediaSourceThread.start(); mediaSourceThread.start();
mediaSourceHandler = Util.createHandler(mediaSourceThread.getLooper(), /* callback= */ this); mediaSourceHandler = Util.createHandler(mediaSourceThread.getLooper(), /* callback= */ this);
mediaSourceHandler.sendEmptyMessage(MESSAGE_PREPARE_SOURCE); mediaSourceHandler.sendEmptyMessage(MESSAGE_PREPARE_SOURCE);
pendingMediaPeriods = new ArrayList<>();
} }
public void release() { public void release() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment