REGRESSION: [Mac] Intermittent crashes in AXObjectCache::notificationPostTimerFired
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 6 Jan 2013 06:16:13 +0000 (06:16 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 6 Jan 2013 06:16:13 +0000 (06:16 +0000)
https://bugs.webkit.org/show_bug.cgi?id=106106

Reviewed by Eric Seidel.

The crash was cause by notification post timer firing after the object destruction had taken place.
Clear the timer so that this won't happen. Also make sure the document doesn't go away while we're
going through m_notificationsToPost.

No new tests since crashes have been caught by various layout tests, and we can't easily
create a deterministic layout test for this particular crash.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::~AXObjectCache):
(WebCore::AXObjectCache::notificationPostTimerFired):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@138916 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/accessibility/AXObjectCache.cpp

index 21153705a8a8e34a00469b25078ad3ef08a43015..408aa435db74f07bff569c0e3699fdf9c40cc579 100644 (file)
@@ -1,3 +1,21 @@
+2013-01-05  Ryosuke Niwa  <rniwa@webkit.org>
+
+        REGRESSION: [Mac] Intermittent crashes in AXObjectCache::notificationPostTimerFired
+        https://bugs.webkit.org/show_bug.cgi?id=106106
+
+        Reviewed by Eric Seidel.
+
+        The crash was cause by notification post timer firing after the object destruction had taken place.
+        Clear the timer so that this won't happen. Also make sure the document doesn't go away while we're
+        going through m_notificationsToPost.
+
+        No new tests since crashes have been caught by various layout tests, and we can't easily
+        create a deterministic layout test for this particular crash.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::AXObjectCache::~AXObjectCache):
+        (WebCore::AXObjectCache::notificationPostTimerFired):
+
 2013-01-05  Michael Pruett  <michael@68k.org>
 
         IndexedDB: Replace int64 with int64_t
index d88a15a3621690e2d2da23a8ca4129e7e6d4a5d0..079555b096d21dc20195cb33b09071b306f2b740 100644 (file)
@@ -94,6 +94,8 @@ AXObjectCache::AXObjectCache(const Document* doc)
 
 AXObjectCache::~AXObjectCache()
 {
+    m_notificationPostTimer.stop();
+
     HashMap<AXID, RefPtr<AccessibilityObject> >::iterator end = m_objects.end();
     for (HashMap<AXID, RefPtr<AccessibilityObject> >::iterator it = m_objects.begin(); it != end; ++it) {
         AccessibilityObject* obj = (*it).value.get();
@@ -592,6 +594,8 @@ void AXObjectCache::childrenChanged(AccessibilityObject* obj)
     
 void AXObjectCache::notificationPostTimerFired(Timer<AXObjectCache>*)
 {
+    RefPtr<Document> protectorForCacheOwner(m_document);
+
     m_notificationPostTimer.stop();
 
     unsigned i = 0, count = m_notificationsToPost.size();