Index: content/browser/frame_host/render_frame_host_manager.cc |
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc |
index 1ffbbaa4861f5795c19410c982d11b26da767cdd..79a477d1e020d3b3b20b25c1fb7d121c842a1110 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -912,10 +912,13 @@ void RenderFrameHostManager::DiscardUnusedFrame( |
void RenderFrameHostManager::MoveToPendingDeleteHosts( |
scoped_ptr<RenderFrameHostImpl> render_frame_host) { |
- // If this is the main frame going away, mark the corresponding |
- // RenderViewHost for deletion as well so that we don't try to reuse it. |
- if (render_frame_host->frame_tree_node()->IsMainFrame()) |
+ // If this is the main frame going away and there are no more references to |
+ // its RenderViewHost, mark it for deletion as well so that we don't try to |
+ // reuse it. |
+ if (render_frame_host->frame_tree_node()->IsMainFrame() && |
+ render_frame_host->render_view_host()->ref_count() <= 1) { |
render_frame_host->render_view_host()->set_pending_deletion(); |
+ } |
// |render_frame_host| will be deleted when its SwapOut ACK is received, or |
// when the timer times out, or when the RFHM itself is deleted (whichever |