Index: content/renderer/media/renderer_webmediaplayer_delegate.cc |
diff --git a/content/renderer/media/renderer_webmediaplayer_delegate.cc b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
index 2ae2b8bd2838c03dae8e2d1218572e4947b200c1..9a4db2bf4213a960250b911b5add2073686ec8bf 100644 |
--- a/content/renderer/media/renderer_webmediaplayer_delegate.cc |
+++ b/content/renderer/media/renderer_webmediaplayer_delegate.cc |
@@ -220,9 +220,15 @@ void RendererWebMediaPlayerDelegate::RemoveIdleDelegate(int delegate_id) { |
void RendererWebMediaPlayerDelegate::CleanupIdleDelegates( |
base::TimeDelta timeout) { |
+ // Drop reentrant cleanups which can occur during forced suspension when the |
+ // number of idle delegates is too high for a given device. |
+ if (idle_cleanup_running_) |
+ return; |
+ |
// Iterate over the delegates and suspend the idle ones. Note: The call to |
// OnHidden() can trigger calls into RemoveIdleDelegate(), so for iterator |
watk
2016/09/27 20:58:30
unrelated, but if you're making another change, "O
DaleCurtis
2016/09/27 21:03:49
Done.
|
// validity we set |idle_cleanup_running_| to true and defer deletions. |
+ DCHECK(!idle_cleanup_running_); |
base::AutoReset<bool> scoper(&idle_cleanup_running_, true); |
watk
2016/09/27 20:58:30
Might make sense to consolidate the comments and p
DaleCurtis
2016/09/27 21:03:49
Hmm, don't like separating the comments like that,
|
const base::TimeTicks now = tick_clock_->NowTicks(); |
for (auto& idle_delegate_entry : idle_delegate_map_) { |