Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(680)

Unified Diff: content/renderer/service_worker/embedded_worker_context_client.cc

Issue 287193011: Clear EmbeddedWorkerContextClient's thread-local ptr in willDestroyWorkerContext() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed todo comment Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/service_worker/embedded_worker_context_client.cc
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc
index 3ff7d0f796f06978a0a8a8ebb23258433a64fad9..ca198b063a9a028d2fe7d6a162bbc361bfb4ff3d 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.cc
+++ b/content/renderer/service_worker/embedded_worker_context_client.cc
@@ -97,9 +97,6 @@ EmbeddedWorkerContextClient::EmbeddedWorkerContextClient(
}
EmbeddedWorkerContextClient::~EmbeddedWorkerContextClient() {
- // g_worker_client_tls.Pointer()->Get() could be NULL if this gets
- // deleted before workerContextStarted() is called.
- g_worker_client_tls.Pointer()->Set(NULL);
}
bool EmbeddedWorkerContextClient::OnMessageReceived(
@@ -143,6 +140,8 @@ void EmbeddedWorkerContextClient::workerContextStarted(
worker_task_runner_ = new WorkerThreadTaskRunner(
WorkerTaskRunner::Instance()->CurrentWorkerId());
DCHECK_NE(0, WorkerTaskRunner::Instance()->CurrentWorkerId());
+ // g_worker_client_tls.Pointer()->Get() could return NULL if this context
+ // gets deleted before workerContextStarted() is called.
DCHECK(g_worker_client_tls.Pointer()->Get() == NULL);
DCHECK(!script_context_);
g_worker_client_tls.Pointer()->Set(this);
@@ -164,9 +163,15 @@ void EmbeddedWorkerContextClient::willDestroyWorkerContext() {
// worker_task_runner_->RunsTasksOnCurrentThread() returns false
// (while we're still on the worker thread).
script_context_.reset();
+
+ // This also lets the message filter stop dispatching messages to
+ // this client.
+ g_worker_client_tls.Pointer()->Set(NULL);
}
void EmbeddedWorkerContextClient::workerContextDestroyed() {
+ DCHECK(g_worker_client_tls.Pointer()->Get() == NULL);
+
// Now we should be able to free the WebEmbeddedWorker container on the
// main thread.
main_thread_proxy_->PostTask(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698