Index: Source/bindings/v8/WorkerScriptController.cpp |
diff --git a/Source/bindings/v8/WorkerScriptController.cpp b/Source/bindings/v8/WorkerScriptController.cpp |
index acf1941814d3d46b53a38e4756b46556320e5805..ff5b233faf0d6bf1f96fef529a456bc0932c5cb6 100644 |
--- a/Source/bindings/v8/WorkerScriptController.cpp |
+++ b/Source/bindings/v8/WorkerScriptController.cpp |
@@ -100,10 +100,6 @@ WorkerScriptController::~WorkerScriptController() |
{ |
ThreadState::current()->removeInterruptor(m_interruptor.get()); |
- RELEASE_ASSERT(m_world->hasOneRef()); |
- // ~DOMWrapperWorld() must be called before disposing the isolate. |
- m_world = nullptr; |
- |
// The corresponding call to didStartWorkerRunLoop is in |
// WorkerThread::workerThread(). |
// See http://webkit.org/b/83104#c14 for why this is here. |
@@ -111,6 +107,8 @@ WorkerScriptController::~WorkerScriptController() |
disposeContext(); |
+ m_world->dispose(); |
kouhei (in TOK)
2014/03/10 04:49:26
Can't we just delete the world instead? Why do we
haraken
2014/03/10 04:58:59
Because other objects can retain RefPtr<DOMWrapper
|
+ |
ThreadState::current()->addCleanupTask(IsolateCleanupTask::create(m_isolate)); |
} |
@@ -128,7 +126,7 @@ bool WorkerScriptController::initializeContextIfNeeded() |
if (context.IsEmpty()) |
return false; |
- m_perContextData = V8PerContextData::create(context, m_world.get()); |
+ m_perContextData = V8PerContextData::create(context, m_world); |
v8::Context::Scope scope(context); |
@@ -213,11 +211,11 @@ void WorkerScriptController::evaluate(const ScriptSourceCode& sourceCode, RefPtr |
if (state.hadException) { |
if (errorEvent) { |
*errorEvent = m_workerGlobalScope.shouldSanitizeScriptError(state.sourceURL, NotSharableCrossOrigin) ? |
- ErrorEvent::createSanitizedError(nullptr) : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber, nullptr); |
+ ErrorEvent::createSanitizedError(0) : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber, 0); |
V8ErrorHandler::storeExceptionOnErrorEventWrapper(errorEvent->get(), state.exception.v8Value(), m_isolate); |
} else { |
ASSERT(!m_workerGlobalScope.shouldSanitizeScriptError(state.sourceURL, NotSharableCrossOrigin)); |
- RefPtr<ErrorEvent> event = m_errorEventFromImportedScript ? m_errorEventFromImportedScript.release() : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber, nullptr); |
+ RefPtr<ErrorEvent> event = m_errorEventFromImportedScript ? m_errorEventFromImportedScript.release() : ErrorEvent::create(state.errorMessage, state.sourceURL, state.lineNumber, state.columnNumber, 0); |
m_workerGlobalScope.reportException(event, nullptr, NotSharableCrossOrigin); |
} |
} |