[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