2011-06-14 Geoffrey Garen <ggaren@apple.com>
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jun 2011 07:08:41 +0000 (07:08 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jun 2011 07:08:41 +0000 (07:08 +0000)
        Reviewed by Dan Bernstein.

        Fixed an inavlid ASSERT I found while investigating
        <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92
        https://bugs.webkit.org/show_bug.cgi?id=62699

        No test since we don't know of a way to get WebCore to deallocate the
        next-to-finalize handle, which is also the last handle in the list,
        while finalizing the second-to-last handle in the list.

        * heap/HandleHeap.h:
        (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a
        non-0 next() after updating it, since it is valid to update m_nextToFinalize
        to point to the tail sentinel.

        Do ASSERT that m_nextToFinalize has a non-0 next() before updating it,
        since it is not valid to update m_nextToFinalize to point past the tail
        sentinel.

        Also, use m_nextToFinalize consistently for clarity.

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/heap/HandleHeap.h

index 486e190..2e4a5fe 100644 (file)
@@ -1,3 +1,26 @@
+2011-06-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Fixed an inavlid ASSERT I found while investigating
+        <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92
+        https://bugs.webkit.org/show_bug.cgi?id=62699        
+
+        No test since we don't know of a way to get WebCore to deallocate the
+        next-to-finalize handle, which is also the last handle in the list,
+        while finalizing the second-to-last handle in the list.
+
+        * heap/HandleHeap.h:
+        (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a
+        non-0 next() after updating it, since it is valid to update m_nextToFinalize
+        to point to the tail sentinel.
+        
+        Do ASSERT that m_nextToFinalize has a non-0 next() before updating it,
+        since it is not valid to update m_nextToFinalize to point past the tail
+        sentinel.
+        
+        Also, use m_nextToFinalize consistently for clarity.
+
 2011-06-14  Gavin Barraclough  <barraclough@apple.com>
 
         Reviewed by Sam Weinig.
index ed68b45..b325546 100644 (file)
@@ -163,8 +163,8 @@ inline void HandleHeap::deallocate(HandleSlot handle)
 {
     Node* node = toNode(handle);
     if (node == m_nextToFinalize) {
-        m_nextToFinalize = node->next();
         ASSERT(m_nextToFinalize->next());
+        m_nextToFinalize = m_nextToFinalize->next();
     }
 
     SentinelLinkedList<Node>::remove(node);