| Index: Source/core/inspector/WorkerDebuggerAgent.cpp
|
| diff --git a/Source/core/inspector/WorkerDebuggerAgent.cpp b/Source/core/inspector/WorkerDebuggerAgent.cpp
|
| index 52d2b4d4f5c01e4badba956ba1125f152e94843d..109edaa1f4757022624bc978246331696be6c0f8 100644
|
| --- a/Source/core/inspector/WorkerDebuggerAgent.cpp
|
| +++ b/Source/core/inspector/WorkerDebuggerAgent.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "core/inspector/WorkerDebuggerAgent.h"
|
|
|
| #include "bindings/v8/ScriptDebugServer.h"
|
| +#include "core/inspector/WorkerInspectorController.h"
|
| #include "core/workers/WorkerGlobalScope.h"
|
| #include "core/workers/WorkerThread.h"
|
| #include "wtf/MessageQueue.h"
|
| @@ -40,21 +41,6 @@ namespace WebCore {
|
|
|
| namespace {
|
|
|
| -Mutex& workerDebuggerAgentsMutex()
|
| -{
|
| - AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
|
| - return mutex;
|
| -}
|
| -
|
| -typedef HashMap<WorkerThread*, WorkerDebuggerAgent*> WorkerDebuggerAgents;
|
| -
|
| -WorkerDebuggerAgents& workerDebuggerAgents()
|
| -{
|
| - DEFINE_STATIC_LOCAL(WorkerDebuggerAgents, agents, ());
|
| - return agents;
|
| -}
|
| -
|
| -
|
| class RunInspectorCommandsTask FINAL : public ScriptDebugServer::Task {
|
| public:
|
| explicit RunInspectorCommandsTask(WorkerThread* thread)
|
| @@ -73,33 +59,40 @@ private:
|
|
|
| } // namespace
|
|
|
| -PassOwnPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
|
| +PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
|
| {
|
| - return adoptPtr(new WorkerDebuggerAgent(scriptDebugServer, inspectedWorkerGlobalScope, injectedScriptManager));
|
| + return adoptPtrWillBeNoop(new WorkerDebuggerAgent(scriptDebugServer, inspectedWorkerGlobalScope, injectedScriptManager));
|
| }
|
|
|
| WorkerDebuggerAgent::WorkerDebuggerAgent(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
|
| : InspectorDebuggerAgent(injectedScriptManager)
|
| , m_scriptDebugServer(scriptDebugServer)
|
| , m_inspectedWorkerGlobalScope(inspectedWorkerGlobalScope)
|
| + , m_disposed(false)
|
| {
|
| - MutexLocker lock(workerDebuggerAgentsMutex());
|
| - workerDebuggerAgents().set(inspectedWorkerGlobalScope->thread(), this);
|
| }
|
|
|
| WorkerDebuggerAgent::~WorkerDebuggerAgent()
|
| {
|
| - MutexLocker lock(workerDebuggerAgentsMutex());
|
| - ASSERT(workerDebuggerAgents().contains(m_inspectedWorkerGlobalScope->thread()));
|
| - workerDebuggerAgents().remove(m_inspectedWorkerGlobalScope->thread());
|
| +}
|
| +
|
| +void WorkerDebuggerAgent::trace(Visitor* visitor)
|
| +{
|
| + visitor->trace(m_inspectedWorkerGlobalScope);
|
| + InspectorDebuggerAgent::trace(visitor);
|
| +}
|
| +
|
| +void WorkerDebuggerAgent::dispose()
|
| +{
|
| + MutexLocker locker(m_mutex);
|
| + m_disposed = true;
|
| }
|
|
|
| void WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(WorkerThread* thread)
|
| {
|
| - MutexLocker lock(workerDebuggerAgentsMutex());
|
| - WorkerDebuggerAgent* agent = workerDebuggerAgents().get(thread);
|
| - if (agent)
|
| - agent->m_scriptDebugServer->interruptAndRunTask(adoptPtr(new RunInspectorCommandsTask(thread)));
|
| + MutexLocker locker(m_mutex);
|
| + if (!m_disposed)
|
| + scriptDebugServer().interruptAndRunTask(adoptPtr(new RunInspectorCommandsTask(thread)));
|
| }
|
|
|
| void WorkerDebuggerAgent::startListeningScriptDebugServer()
|
|
|