| Index: third_party/WebKit/Source/platform/heap/ThreadState.cpp
|
| diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
|
| index 2860b2c855581756d1d5312a3f0eee4e27b07b5c..5e50d62c9c20e1406a752ba225a051c6fe8215ac 100644
|
| --- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp
|
| +++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
|
| @@ -133,9 +133,7 @@ ThreadState::ThreadState()
|
| ASSERT(!**s_threadSpecific);
|
| **s_threadSpecific = this;
|
|
|
| - m_heap = new ThreadHeap();
|
| - ASSERT(m_heap);
|
| - m_heap->attach(this);
|
| + m_heap = WTF::wrapUnique(new ThreadHeap(this));
|
|
|
| for (int arenaIndex = 0; arenaIndex < BlinkGC::LargeObjectArenaIndex;
|
| arenaIndex++)
|
| @@ -165,6 +163,15 @@ void ThreadState::attachCurrentThread() {
|
| new ThreadState();
|
| }
|
|
|
| +void ThreadState::detachCurrentThread() {
|
| + ThreadState* state = current();
|
| + state->runTerminationGC();
|
| + if (state->isMainThread())
|
| + DCHECK_EQ(state->heap().heapStats().allocatedSpace(), 0u);
|
| + CHECK(state->gcState() == ThreadState::NoGCScheduled);
|
| + delete state;
|
| +}
|
| +
|
| void ThreadState::removeAllPages() {
|
| ASSERT(checkThread());
|
| for (int i = 0; i < BlinkGC::NumberOfArenas; ++i)
|
| @@ -210,13 +217,6 @@ void ThreadState::runTerminationGC() {
|
| removeAllPages();
|
| }
|
|
|
| -void ThreadState::detachCurrentThread() {
|
| - ThreadState* state = current();
|
| - state->heap().detach(state);
|
| - RELEASE_ASSERT(state->gcState() == ThreadState::NoGCScheduled);
|
| - delete state;
|
| -}
|
| -
|
| NO_SANITIZE_ADDRESS
|
| void ThreadState::visitAsanFakeStackForPointer(Visitor* visitor, Address ptr) {
|
| #if defined(ADDRESS_SANITIZER)
|
| @@ -1218,10 +1218,7 @@ void ThreadState::addInterruptor(
|
| std::unique_ptr<BlinkGCInterruptor> interruptor) {
|
| ASSERT(checkThread());
|
| SafePointScope scope(BlinkGC::HeapPointersOnStack);
|
| - {
|
| - MutexLocker locker(m_heap->threadAttachMutex());
|
| - m_interruptors.push_back(std::move(interruptor));
|
| - }
|
| + m_interruptors.push_back(std::move(interruptor));
|
| }
|
|
|
| void ThreadState::registerStaticPersistentNode(
|
| @@ -1268,14 +1265,6 @@ void ThreadState::leaveStaticReferenceRegistrationDisabledScope() {
|
| }
|
| #endif
|
|
|
| -void ThreadState::lockThreadAttachMutex() {
|
| - m_heap->threadAttachMutex().lock();
|
| -}
|
| -
|
| -void ThreadState::unlockThreadAttachMutex() {
|
| - m_heap->threadAttachMutex().unlock();
|
| -}
|
| -
|
| void ThreadState::invokePreFinalizers() {
|
| ASSERT(checkThread());
|
| ASSERT(!sweepForbidden());
|
|
|