Crash loading skydrive.com (assertion under RemoteLayerTreeDisplayRefreshMonitor)
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 May 2014 15:43:55 +0000 (15:43 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 May 2014 15:43:55 +0000 (15:43 +0000)
commitd934fcfe9cf876ae4c1e64d297106990d51b649a
tree5ac635a76c25a426514e5b93885edb9ad20e0560
parent377e503f229e8e252c6ecea7e2de1aba96a3ad6b
Crash loading skydrive.com (assertion under RemoteLayerTreeDisplayRefreshMonitor)
https://bugs.webkit.org/show_bug.cgi?id=133370
<rdar://problem/17061361>

Reviewed by Darin Adler.

* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h:
* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
(WebKit::RemoteLayerTreeDrawingArea::willDestroyDisplayRefreshMonitor):
(WebKit::RemoteLayerTreeDrawingArea::didUpdate):
Post-landing review comments from Darin noted that checking if the
DrawingArea's m_displayRefreshMonitors contains the monitor in the
list to notify is insufficient, because a new one could have been
added with the same address. Instead, copy the HashSet, removing
at random from it and firing didUpdateLayers, but *also* removing
from it in the willDestroyDisplayRefreshMonitor callback.
This is very similar to what DisplayRefreshMonitor itself does internally
(we don't have to duplicate its code to avoid re-entry because it is
already impossible to re-enter didUpdate).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@169486 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.h
Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm