Index: Source/web/WebSharedWorkerImpl.cpp |
diff --git a/Source/web/WebSharedWorkerImpl.cpp b/Source/web/WebSharedWorkerImpl.cpp |
index 1d7d6881361626e888c845e4315715faa8fb596a..af0cc99ccfb7bdb6e037df616f553c8c30e70963 100644 |
--- a/Source/web/WebSharedWorkerImpl.cpp |
+++ b/Source/web/WebSharedWorkerImpl.cpp |
@@ -178,12 +178,23 @@ void WebSharedWorkerImpl::stopWorkerThread() |
if (m_askedToTerminate) |
return; |
m_askedToTerminate = true; |
+ |
+ bool hasPendingActivity = false; |
if (m_mainScriptLoader) { |
m_mainScriptLoader->cancel(); |
m_mainScriptLoader.clear(); |
+ hasPendingActivity = true; |
} |
- if (m_workerThread) |
+ if (m_workerThread) { |
m_workerThread->stop(); |
+ hasPendingActivity = true; |
+ } |
+ |
+ if (!hasPendingActivity) { |
+ // If there are no active WorkerThread, |workerGlobalScopeClosed()| |
+ // callback to delete this is never called, so we should clean up here. |
+ delete this; |
+ } |
} |
void WebSharedWorkerImpl::initializeLoader(const WebURL& url) |