[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

dimich at chromium.org dimich at chromium.org
Wed Apr 7 23:47:16 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 301cf2b881de4188fed736e9e683ce6ac8cf1060
Author: dimich at chromium.org <dimich at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 18 20:25:52 2009 +0000

    Reverting r50919 that has introduced a non-thread-safe refcounting in ScriptExecutionContext::postTaskToMainThread.
    https://bugs.webkit.org/show_bug.cgi?id=31615
    
    Reviewed by Eric Seidel.
    
    * dom/Document.cpp:
    (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
    (WebCore::ScriptExecutionContextTaskTimer::fired):
    (WebCore::PerformTaskContext::PerformTaskContext):
    (WebCore::performTask):
    (WebCore::Document::postTask):
    * dom/ScriptExecutionContext.cpp:
    * dom/ScriptExecutionContext.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@51127 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 0ed838d..6737a4b 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,4 +1,20 @@
-2009-11-17  Jens Alfke  <snej at chromium.org>
+2009-11-18  Dmitry Titov  <dimich at chromium.org>
+
+        Reviewed by Eric Seidel.
+
+        Reverting r50919 that has introduced a non-thread-safe refcounting in ScriptExecutionContext::postTaskToMainThread.
+        https://bugs.webkit.org/show_bug.cgi?id=31615
+
+        * dom/Document.cpp:
+        (WebCore::ScriptExecutionContextTaskTimer::ScriptExecutionContextTaskTimer):
+        (WebCore::ScriptExecutionContextTaskTimer::fired):
+        (WebCore::PerformTaskContext::PerformTaskContext):
+        (WebCore::performTask):
+        (WebCore::Document::postTask):
+        * dom/ScriptExecutionContext.cpp:
+        * dom/ScriptExecutionContext.h:
+
+2009-11-18  Jens Alfke  <snej at chromium.org>
 
         Reviewed by Darin Adler.
 
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp
index 913f570..dec15bf 100644
--- a/WebCore/dom/Document.cpp
+++ b/WebCore/dom/Document.cpp
@@ -4536,9 +4536,51 @@ void Document::scriptImported(unsigned long identifier, const String& sourceStri
 #endif
 }
 
+class ScriptExecutionContextTaskTimer : public TimerBase {
+public:
+    ScriptExecutionContextTaskTimer(PassRefPtr<Document> context, PassOwnPtr<ScriptExecutionContext::Task> task)
+        : m_context(context)
+        , m_task(task)
+    {
+    }
+
+private:
+    virtual void fired()
+    {
+        m_task->performTask(m_context.get());
+        delete this;
+    }
+
+    RefPtr<Document> m_context;
+    OwnPtr<ScriptExecutionContext::Task> m_task;
+};
+
+struct PerformTaskContext : Noncopyable {
+    PerformTaskContext(ScriptExecutionContext* scriptExecutionContext, PassOwnPtr<ScriptExecutionContext::Task> task)
+        : scriptExecutionContext(scriptExecutionContext)
+        , task(task)
+    {
+    }
+
+    ScriptExecutionContext* scriptExecutionContext; // The context should exist until task execution.
+    OwnPtr<ScriptExecutionContext::Task> task;
+};
+
+static void performTask(void* ctx)
+{
+    PerformTaskContext* ptctx = reinterpret_cast<PerformTaskContext*>(ctx);
+    ptctx->task->performTask(ptctx->scriptExecutionContext);
+    delete ptctx;
+}
+
 void Document::postTask(PassOwnPtr<Task> task)
 {
-    postTaskToMainThread(task);
+    if (isMainThread()) {
+        ScriptExecutionContextTaskTimer* timer = new ScriptExecutionContextTaskTimer(static_cast<Document*>(this), task);
+        timer->startOneShot(0);
+    } else {
+        callOnMainThread(performTask, new PerformTaskContext(this, task));
+    }
 }
 
 Element* Document::findAnchor(const String& name)
diff --git a/WebCore/dom/ScriptExecutionContext.cpp b/WebCore/dom/ScriptExecutionContext.cpp
index c8d1b36..bc71084 100644
--- a/WebCore/dom/ScriptExecutionContext.cpp
+++ b/WebCore/dom/ScriptExecutionContext.cpp
@@ -215,53 +215,4 @@ JSC::JSGlobalData* ScriptExecutionContext::globalData()
 }
 #endif
 
-class ScriptExecutionContextTaskTimer : public TimerBase {
-public:
-    ScriptExecutionContextTaskTimer(PassRefPtr<ScriptExecutionContext> context, PassOwnPtr<ScriptExecutionContext::Task> task)
-        : m_context(context)
-        , m_task(task)
-    {
-    }
-
-private:
-    virtual void fired()
-    {
-        m_task->performTask(m_context.get());
-        delete this;
-    }
-
-    RefPtr<ScriptExecutionContext> m_context;
-    OwnPtr<ScriptExecutionContext::Task> m_task;
-};
-
-class PerformTaskData {
-public:
-    PerformTaskData(PassRefPtr<ScriptExecutionContext> context, PassOwnPtr<ScriptExecutionContext::Task> task)
-        : m_context(context)
-        , m_task(task)
-    {
-    }
-
-    static void performTask(void* data)
-    {
-        PerformTaskData* taskData = static_cast<PerformTaskData*>(data);
-        taskData->m_task->performTask(taskData->m_context.get());
-        delete taskData;
-    }
-
-private:
-    RefPtr<ScriptExecutionContext> m_context;
-    OwnPtr<ScriptExecutionContext::Task> m_task;
-};
-
-void ScriptExecutionContext::postTaskToMainThread(PassOwnPtr<Task> task)
-{
-    if (isMainThread()) {
-        ScriptExecutionContextTaskTimer* timer = new ScriptExecutionContextTaskTimer(this, task);
-        timer->startOneShot(0);
-    } else {
-        callOnMainThread(PerformTaskData::performTask, new PerformTaskData(this, task));
-    }
-}
-
 } // namespace WebCore
diff --git a/WebCore/dom/ScriptExecutionContext.h b/WebCore/dom/ScriptExecutionContext.h
index 0e5521b..1414125 100644
--- a/WebCore/dom/ScriptExecutionContext.h
+++ b/WebCore/dom/ScriptExecutionContext.h
@@ -114,9 +114,6 @@ namespace WebCore {
         //       that already contains content.
         void setSecurityOrigin(PassRefPtr<SecurityOrigin>);
 
-        // Helper for contexts that live on the main thread.
-        void postTaskToMainThread(PassOwnPtr<Task>);
-
     private:
         virtual const KURL& virtualURL() const = 0;
         virtual KURL virtualCompleteURL(const String&) const = 0;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list