Index: runtime/vm/isolate.cc |
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
index 6c3fa50322b6ed43d2e7a8c7b3a81b17a484ccac..55720c97d681dcebdbff57a779d9c3dc8158d180 100644 |
--- a/runtime/vm/isolate.cc |
+++ b/runtime/vm/isolate.cc |
@@ -2574,9 +2574,10 @@ Thread* Isolate::ScheduleThread(bool is_mutator, bool bypass_safepoint) { |
os_thread->set_thread(thread); |
if (is_mutator) { |
mutator_thread_ = thread; |
- if (this != Dart::vm_isolate()) { |
- mutator_thread_->set_top(heap()->new_space()->top()); |
- mutator_thread_->set_end(heap()->new_space()->end()); |
+ if ((Dart::vm_isolate() != NULL) && |
+ (heap() != Dart::vm_isolate()->heap())) { |
+ mutator_thread_->set_top(0); |
+ mutator_thread_->set_end(0); |
} |
} |
Thread::SetCurrent(thread); |
@@ -2616,12 +2617,13 @@ void Isolate::UnscheduleThread(Thread* thread, |
os_thread->set_thread(NULL); |
OSThread::SetCurrent(os_thread); |
if (is_mutator) { |
- if (this != Dart::vm_isolate()) { |
- heap()->new_space()->set_top(mutator_thread_->top_); |
- heap()->new_space()->set_end(mutator_thread_->end_); |
+ if ((Dart::vm_isolate() != NULL) && |
+ (heap() != Dart::vm_isolate()->heap())) { |
+ if (mutator_thread_->HasActiveTLAB()) { |
+ heap()->AbandonRemainingTLAB(mutator_thread_); |
+ } |
} |
- mutator_thread_->top_ = 0; |
- mutator_thread_->end_ = 0; |
+ ASSERT(!mutator_thread_->HasActiveTLAB()); |
mutator_thread_ = NULL; |
} |
thread->isolate_ = NULL; |