Index: Source/core/workers/WorkerGlobalScope.cpp |
diff --git a/Source/core/workers/WorkerGlobalScope.cpp b/Source/core/workers/WorkerGlobalScope.cpp |
index 0b4146921bf7a3f778860dceddc44005e00f9b4f..1699766d3f6631ec4627747717212073bf0bc3d1 100644 |
--- a/Source/core/workers/WorkerGlobalScope.cpp |
+++ b/Source/core/workers/WorkerGlobalScope.cpp |
@@ -93,6 +93,9 @@ |
WorkerGlobalScope::~WorkerGlobalScope() |
{ |
+#if !ENABLE(OILPAN) |
+ dispose(); |
+#endif |
} |
void WorkerGlobalScope::applyContentSecurityPolicyFromString(const String& policy, ContentSecurityPolicyHeaderType contentSecurityPolicyType) |
@@ -193,21 +196,18 @@ |
{ |
ASSERT(thread()->isCurrentThread()); |
+ // Notify proxy that we are going away. This can free the WorkerThread object, so do not access it after this. |
+ thread()->workerReportingProxy().workerGlobalScopeDestroyed(); |
+ |
clearScript(); |
clearInspector(); |
setClient(0); |
- // Observers must not access the context of a disposed WorkerGlobalScope |
- // lacking a thread object. |
- // |
- // Notify them now that the context has been destroyed and explicitly remove |
- // them as observers. If this is delayed until the LifecycleNotifier of the |
- // WorkerGlobalScope is garbage collected and destructed, some observers |
- // may have access to the disposed object (it all depends on the order |
- // the garbage collector finalizes these objects.) Prevent that situation from |
- // arising here. |
- removeAllLifecycleObservers(); |
- clearThread(); |
+ // The thread reference isn't currently cleared, as the execution |
+ // context's thread is accessed by GCed lifetime objects when |
+ // they're finalized. |
+ // FIXME: oilpan: avoid by explicitly removing the WorkerGlobalScope |
+ // as an observable context right here. |
} |
void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionState& exceptionState) |