Fixes a huge leak with the Inspector where it was protecting
authortimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 May 2008 04:47:46 +0000 (04:47 +0000)
committertimothy@apple.com <timothy@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 25 May 2008 04:47:46 +0000 (04:47 +0000)
a large object that was not being unprotected.

<rdar://problem/5961999> Inspector protects a large JavaScript
object and never unprotects it (large leak)

Reviewed by Darin Adler.

* page/InspectorController.cpp:
(WebCore::InspectorController::inspectedPageDestroyed): Call close()
and removed a call to stopDebugging() and moved it to close().
(WebCore::InspectorController::close): Add stopDebugging() and
stopUserInitiatedProfiling(). Removed an ASSERT and added an
if statement before calling JSValueUnprotect. We don't always have
a m_scriptContext and m_scriptObject.

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

WebCore/ChangeLog
WebCore/page/InspectorController.cpp

index ea98f4b..2a52dc6 100644 (file)
@@ -1,3 +1,21 @@
+2008-05-24  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes a huge leak with the Inspector where it was protecting
+        a large object that was not being unprotected.
+
+        <rdar://problem/5961999> Inspector protects a large JavaScript
+        object and never unprotects it (large leak)
+
+        Reviewed by Darin Adler.
+
+        * page/InspectorController.cpp:
+        (WebCore::InspectorController::inspectedPageDestroyed): Call close()
+        and removed a call to stopDebugging() and moved it to close().
+        (WebCore::InspectorController::close): Add stopDebugging() and
+        stopUserInitiatedProfiling(). Removed an ASSERT and added an
+        if statement before calling JSValueUnprotect. We don't always have
+        a m_scriptContext and m_scriptObject.
+
 2008-05-24  Alp Toker  <alp@nuanti.com>
 
         Win32/gcc3 build fix in Pango font backend. UChar needs to be
index 4e68781..b7ab05e 100644 (file)
@@ -1056,8 +1056,9 @@ InspectorController::~InspectorController()
 
 void InspectorController::inspectedPageDestroyed()
 {
+    close();
+
     ASSERT(m_inspectedPage);
-    stopDebugging();
     m_inspectedPage = 0;
 }
 
@@ -1391,10 +1392,12 @@ void InspectorController::close()
     if (!enabled())
         return;
 
+    stopUserInitiatedProfiling();
+    stopDebugging();
     closeWindow();
 
-    ASSERT(m_scriptContext && m_scriptObject);
-    JSValueUnprotect(m_scriptContext, m_scriptObject);
+    if (m_scriptContext && m_scriptObject)
+        JSValueUnprotect(m_scriptContext, m_scriptObject);
 
     m_scriptObject = 0;
     m_scriptContext = 0;