mirror of
https://github.com/androidx/media.git
synced 2025-05-05 22:50:57 +08:00
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
This commit is contained in:
parent
dbabb7c9a3
commit
be9fea89a6
@ -817,10 +817,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;
|
||||||
@ -832,6 +832,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;
|
||||||
@ -839,7 +840,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() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user