summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-10 04:38:56 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-10 04:38:56 +0000
commitbf424edf6b8ac7cf26b6537ff72c786ebabaa751 (patch)
tree51d698ca54e77b7b6253299c0c9b383db1daf048 /content/renderer
parentd90579d1532a3b8736bfd68de450c54e0b3d741f (diff)
downloadchromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.zip
chromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.tar.gz
chromium_src-bf424edf6b8ac7cf26b6537ff72c786ebabaa751.tar.bz2
Fix crash in UMA-reporting aspect ratio when video height is zero.
Also fixed a DCHECK that gets triggered in the same case (audio renderer is destroyed without ever having been created, so DCHECK_NE(stream_id_, 0) was failing). BUG=103552 TEST=failing video stops crashing renderer Review URL: http://codereview.chromium.org/8510017 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109379 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/media/audio_renderer_impl.cc19
-rw-r--r--content/renderer/media/audio_renderer_impl.h3
2 files changed, 18 insertions, 4 deletions
diff --git a/content/renderer/media/audio_renderer_impl.cc b/content/renderer/media/audio_renderer_impl.cc
index bdbefe7..3e617f5 100644
--- a/content/renderer/media/audio_renderer_impl.cc
+++ b/content/renderer/media/audio_renderer_impl.cc
@@ -28,6 +28,7 @@ AudioRendererImpl::LatencyType AudioRendererImpl::latency_type_ =
AudioRendererImpl::AudioRendererImpl()
: AudioRendererBase(),
bytes_per_second_(0),
+ stream_created_(false),
stream_id_(0),
shared_memory_(NULL),
shared_memory_size_(0),
@@ -340,6 +341,8 @@ void AudioRendererImpl::CreateStreamTask(const AudioParameters& audio_params) {
if (stopped_)
return;
+ stream_created_ = true;
+
// Make sure we don't call create more than once.
DCHECK_EQ(0, stream_id_);
stream_id_ = filter_->AddDelegate(this);
@@ -379,6 +382,12 @@ void AudioRendererImpl::SeekTask() {
void AudioRendererImpl::DestroyTask() {
DCHECK(MessageLoop::current() == ChildProcess::current()->io_message_loop());
+ base::AutoLock auto_lock(lock_);
+ // Errors can cause us to get here before CreateStreamTask ever ran, in which
+ // case there's nothing to do.
+ if (!stream_created_)
+ return;
+
// Make sure we don't call destroy more than once.
DCHECK_NE(0, stream_id_);
filter_->RemoveDelegate(stream_id_);
@@ -458,11 +467,13 @@ void AudioRendererImpl::WillDestroyCurrentMessageLoop() {
ChildProcess::current()->io_message_loop()));
// We treat the IO loop going away the same as stopping.
- base::AutoLock auto_lock(lock_);
- if (stopped_)
- return;
+ {
+ base::AutoLock auto_lock(lock_);
+ if (stopped_)
+ return;
- stopped_ = true;
+ stopped_ = true;
+ }
DestroyTask();
}
diff --git a/content/renderer/media/audio_renderer_impl.h b/content/renderer/media/audio_renderer_impl.h
index a3b3995..e38f407 100644
--- a/content/renderer/media/audio_renderer_impl.h
+++ b/content/renderer/media/audio_renderer_impl.h
@@ -173,6 +173,9 @@ class CONTENT_EXPORT AudioRendererImpl
// Used to calculate audio delay given bytes.
uint32 bytes_per_second_;
+ // Whether the stream has been created yet.
+ bool stream_created_;
+
// ID of the stream created in the browser process.
int32 stream_id_;