Index: third_party/WebKit/Source/core/workers/WorkerThread.cpp |
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_party/WebKit/Source/core/workers/WorkerThread.cpp |
index d470e8e2ae8eb902d49d06c57b54888fed418dac..37c77d3b6f633184bff0e95685da6bb0d76c0519 100644 |
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp |
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp |
@@ -154,6 +154,24 @@ static HashSet<WorkerThread*>& workerThreads() |
return threads; |
} |
+WorkerThreadContext::WorkerThreadContext() |
+{ |
+ DCHECK(isMainThread()); |
+} |
+ |
+WorkerThreadContext::~WorkerThreadContext() |
+{ |
+ DCHECK(isMainThread()); |
+} |
+ |
+void WorkerThreadContext::notifyContextDestroyed() |
+{ |
+ DCHECK(isMainThread()); |
+ DCHECK(!m_wasContextDestroyed); |
+ m_wasContextDestroyed = true; |
+ LifecycleNotifier::notifyContextDestroyed(); |
+} |
+ |
WorkerThread::~WorkerThread() |
{ |
DCHECK(isMainThread()); |
@@ -307,7 +325,9 @@ WorkerThread::WorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, Work |
, m_shutdownEvent(adoptPtr(new WaitableEvent( |
WaitableEvent::ResetPolicy::Manual, |
WaitableEvent::InitialState::NonSignaled))) |
+ , m_workerThreadContext(new WorkerThreadContext) |
{ |
+ DCHECK(isMainThread()); |
MutexLocker lock(threadSetMutex()); |
workerThreads().add(this); |
} |
@@ -354,6 +374,8 @@ void WorkerThread::terminateInternal(TerminationMode mode) |
if (m_terminationEvent) |
m_terminationEvent->signal(); |
+ m_workerThreadContext->notifyContextDestroyed(); |
+ |
// If the worker thread was never initialized, don't start another |
// shutdown, but still wait for the thread to signal when shutdown has |
// completed on initializeOnWorkerThread(). |