void WorkerGlobalScope::dispose() { DCHECK(thread()->isCurrentThread()); // Event listeners would keep DOMWrapperWorld objects alive for too long. // Also, they have references to JS objects, which become dangling once Heap // is destroyed. for (auto it = m_eventListeners.begin(); it != m_eventListeners.end();) { V8AbstractEventListener* listener = *it; // clearListenerObject() will unregister the listener from // m_eventListeners, and invalidate the iterator, so we have to advance // it first. ++it; listener->clearListenerObject(); } removeAllEventListeners(); m_scriptController->dispose(); m_scriptController.clear(); m_eventQueue->close(); m_thread = nullptr; }