Index: content/browser/devtools/worker_devtools_manager.cc |
diff --git a/content/browser/devtools/worker_devtools_manager.cc b/content/browser/devtools/worker_devtools_manager.cc |
index db5cc7484f26fd0e3eafe6dda0935a7a16abc60a..d69be2b2b1bedb1def2bfcfbfa2ac992f7ab3d43 100644 |
--- a/content/browser/devtools/worker_devtools_manager.cc |
+++ b/content/browser/devtools/worker_devtools_manager.cc |
@@ -61,11 +61,12 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
explicit WorkerDevToolsAgentHost(WorkerId worker_id) |
: has_worker_id_(false) { |
SetWorkerId(worker_id, false); |
- AddRef(); // Balanced in ResetWorkerId. |
} |
void SetWorkerId(WorkerId worker_id, bool reattach) { |
worker_id_ = worker_id; |
+ if (!has_worker_id_) |
+ AddRef(); // Balanced in ResetWorkerId. |
has_worker_id_ = true; |
g_agent_map.Get()[worker_id_] = this; |
@@ -84,7 +85,7 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
void ResetWorkerId() { |
g_agent_map.Get().erase(worker_id_); |
has_worker_id_ = false; |
- Release(); |
+ Release(); // Balanced in SetWorkerId. |
} |
void SaveAgentRuntimeState(const std::string& state) { |
@@ -97,10 +98,7 @@ class WorkerDevToolsManager::WorkerDevToolsAgentHost |
} |
private: |
- virtual ~WorkerDevToolsAgentHost() { |
- g_agent_map.Get().erase(worker_id_); |
yurys
2013/04/15 05:24:18
Why did this move?
Vladislav Kaznacheev
2013/04/15 13:10:27
Because I needed to call a method from DetachedCli
|
- g_orphan_map.Get().erase(worker_id_); |
- } |
+ virtual ~WorkerDevToolsAgentHost(); |
static void ConnectToWorker( |
int worker_process_id, |
@@ -180,16 +178,16 @@ class WorkerDevToolsManager::DetachedClientHosts { |
agent->ResetWorkerId(); |
} |
- private: |
- DetachedClientHosts() {} |
- ~DetachedClientHosts() {} |
- |
static void RemovePendingWorkerData(WorkerId id) { |
yurys
2013/04/15 05:24:18
Why do you need this method to be public?
|
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |
base::Bind(&RemoveInspectedWorkerDataOnIOThread, id)); |
} |
+ private: |
+ DetachedClientHosts() {} |
+ ~DetachedClientHosts() {} |
+ |
static void RemoveInspectedWorkerDataOnIOThread(WorkerId id) { |
WorkerDevToolsManager::GetInstance()->RemoveInspectedWorkerData(id); |
} |
@@ -441,4 +439,10 @@ void WorkerDevToolsManager::SendResumeToWorker(const WorkerId& id) { |
process->Send(new DevToolsAgentMsg_ResumeWorkerContext(id.second)); |
} |
+WorkerDevToolsManager::WorkerDevToolsAgentHost::~WorkerDevToolsAgentHost() { |
+ DetachedClientHosts::RemovePendingWorkerData(worker_id_); |
+ g_agent_map.Get().erase(worker_id_); |
+ g_orphan_map.Get().erase(worker_id_); |
+} |
+ |
} // namespace content |