| Index: Source/core/workers/WorkerGlobalScope.cpp
|
| diff --git a/Source/core/workers/WorkerGlobalScope.cpp b/Source/core/workers/WorkerGlobalScope.cpp
|
| index 1699766d3f6631ec4627747717212073bf0bc3d1..0b4146921bf7a3f778860dceddc44005e00f9b4f 100644
|
| --- a/Source/core/workers/WorkerGlobalScope.cpp
|
| +++ b/Source/core/workers/WorkerGlobalScope.cpp
|
| @@ -93,9 +93,6 @@ WorkerGlobalScope::WorkerGlobalScope(const KURL& url, const String& userAgent, W
|
|
|
| WorkerGlobalScope::~WorkerGlobalScope()
|
| {
|
| -#if !ENABLE(OILPAN)
|
| - dispose();
|
| -#endif
|
| }
|
|
|
| void WorkerGlobalScope::applyContentSecurityPolicyFromString(const String& policy, ContentSecurityPolicyHeaderType contentSecurityPolicyType)
|
| @@ -196,18 +193,21 @@ void WorkerGlobalScope::dispose()
|
| {
|
| 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);
|
|
|
| - // 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.
|
| + // 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();
|
| }
|
|
|
| void WorkerGlobalScope::importScripts(const Vector<String>& urls, ExceptionState& exceptionState)
|
|
|