예제 #1
0
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;
}