OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/isolate.h" | 5 #include "src/isolate.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <fstream> // NOLINT(readability/streams) | 9 #include <fstream> // NOLINT(readability/streams) |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 if (per_thread == NULL) { | 128 if (per_thread == NULL) { |
129 per_thread = new PerIsolateThreadData(this, thread_id); | 129 per_thread = new PerIsolateThreadData(this, thread_id); |
130 thread_data_table_->Insert(per_thread); | 130 thread_data_table_->Insert(per_thread); |
131 } | 131 } |
132 DCHECK(thread_data_table_->Lookup(this, thread_id) == per_thread); | 132 DCHECK(thread_data_table_->Lookup(this, thread_id) == per_thread); |
133 } | 133 } |
134 return per_thread; | 134 return per_thread; |
135 } | 135 } |
136 | 136 |
137 | 137 |
| 138 void Isolate::DiscardPerThreadDataForThisThread() { |
| 139 int thread_id_int = base::Thread::GetThreadLocalInt(Isolate::thread_id_key_); |
| 140 if (thread_id_int) { |
| 141 ThreadId thread_id = ThreadId(thread_id_int); |
| 142 DCHECK(!thread_manager_->mutex_owner_.Equals(thread_id)); |
| 143 base::LockGuard<base::Mutex> lock_guard(thread_data_table_mutex_.Pointer()); |
| 144 PerIsolateThreadData* per_thread = |
| 145 thread_data_table_->Lookup(this, thread_id); |
| 146 if (per_thread) { |
| 147 DCHECK(!per_thread->thread_state_); |
| 148 thread_data_table_->Remove(per_thread); |
| 149 } |
| 150 } |
| 151 } |
| 152 |
| 153 |
138 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() { | 154 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() { |
139 ThreadId thread_id = ThreadId::Current(); | 155 ThreadId thread_id = ThreadId::Current(); |
140 return FindPerThreadDataForThread(thread_id); | 156 return FindPerThreadDataForThread(thread_id); |
141 } | 157 } |
142 | 158 |
143 | 159 |
144 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread( | 160 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread( |
145 ThreadId thread_id) { | 161 ThreadId thread_id) { |
146 PerIsolateThreadData* per_thread = NULL; | 162 PerIsolateThreadData* per_thread = NULL; |
147 { | 163 { |
(...skipping 2661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2809 // Then check whether this scope intercepts. | 2825 // Then check whether this scope intercepts. |
2810 if ((flag & intercept_mask_)) { | 2826 if ((flag & intercept_mask_)) { |
2811 intercepted_flags_ |= flag; | 2827 intercepted_flags_ |= flag; |
2812 return true; | 2828 return true; |
2813 } | 2829 } |
2814 return false; | 2830 return false; |
2815 } | 2831 } |
2816 | 2832 |
2817 } // namespace internal | 2833 } // namespace internal |
2818 } // namespace v8 | 2834 } // namespace v8 |
OLD | NEW |