Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(762)

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 2305923002: Ensure FFmpegDemuxer WeakPtrs are created on the right thread. (Closed)
Patch Set: Fix. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/ffmpeg_demuxer.cc
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index 5946874b763b08b0aca547586d12f1bc701ea8a6..b1e6684c873ec915197043b8496f98b9d42aef84 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -838,6 +838,7 @@ FFmpegDemuxer::FFmpegDemuxer(
duration_known_(false),
encrypted_media_init_data_cb_(encrypted_media_init_data_cb),
media_tracks_updated_cb_(media_tracks_updated_cb),
+ cancel_pending_seek_factory_(this),
weak_factory_(this) {
DCHECK(task_runner_.get());
DCHECK(data_source_);
@@ -860,6 +861,7 @@ void FFmpegDemuxer::Initialize(DemuxerHost* host,
DCHECK(task_runner_->BelongsToCurrentThread());
host_ = host;
text_enabled_ = enable_text_tracks;
+ weak_this_ = cancel_pending_seek_factory_.GetWeakPtr();
url_protocol_.reset(new BlockingUrlProtocol(
data_source_,
@@ -947,6 +949,7 @@ void FFmpegDemuxer::Stop() {
// Invalidate WeakPtrs on |task_runner_|, destruction may happen on another
// thread.
weak_factory_.InvalidateWeakPtrs();
+ cancel_pending_seek_factory_.InvalidateWeakPtrs();
}
void FFmpegDemuxer::StartWaitingForSeek(base::TimeDelta seek_time) {}
@@ -955,9 +958,9 @@ void FFmpegDemuxer::CancelPendingSeek(base::TimeDelta seek_time) {
if (task_runner_->BelongsToCurrentThread()) {
AbortPendingReads();
} else {
- task_runner_->PostTask(FROM_HERE,
- base::Bind(&FFmpegDemuxer::AbortPendingReads,
- weak_factory_.GetWeakPtr()));
+ // Don't use GetWeakPtr() here since we are on the wrong thread.
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&FFmpegDemuxer::AbortPendingReads, weak_this_));
}
}
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698