Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: runtime/vm/os_thread.cc

Issue 1978153002: Uses an open thread handle as the ThreadJoinId on Windows. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix test Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/os_thread.h ('k') | runtime/vm/os_thread_android.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/os_thread.h" 5 #include "vm/os_thread.h"
6 6
7 #include "vm/atomic.h" 7 #include "vm/atomic.h"
8 #include "vm/lockers.h" 8 #include "vm/lockers.h"
9 #include "vm/log.h" 9 #include "vm/log.h"
10 #include "vm/thread_interrupter.h" 10 #include "vm/thread_interrupter.h"
11 #include "vm/timeline.h" 11 #include "vm/timeline.h"
12 12
13 namespace dart { 13 namespace dart {
14 14
15 // The single thread local key which stores all the thread local data 15 // The single thread local key which stores all the thread local data
16 // for a thread. 16 // for a thread.
17 ThreadLocalKey OSThread::thread_key_ = kUnsetThreadLocalKey; 17 ThreadLocalKey OSThread::thread_key_ = kUnsetThreadLocalKey;
18 OSThread* OSThread::thread_list_head_ = NULL; 18 OSThread* OSThread::thread_list_head_ = NULL;
19 Mutex* OSThread::thread_list_lock_ = NULL; 19 Mutex* OSThread::thread_list_lock_ = NULL;
20 bool OSThread::creation_enabled_ = false; 20 bool OSThread::creation_enabled_ = false;
21 21
22 22
23 OSThread::OSThread() : 23 OSThread::OSThread() :
24 BaseThread(true), 24 BaseThread(true),
25 id_(OSThread::GetCurrentThreadId()), 25 id_(OSThread::GetCurrentThreadId()),
26 join_id_(OSThread::GetCurrentThreadJoinId()), 26 #if defined(DEBUG)
27 join_id_(kInvalidThreadJoinId),
28 #endif
27 trace_id_(OSThread::GetCurrentThreadTraceId()), 29 trace_id_(OSThread::GetCurrentThreadTraceId()),
28 name_(NULL), 30 name_(NULL),
29 timeline_block_lock_(new Mutex()), 31 timeline_block_lock_(new Mutex()),
30 timeline_block_(NULL), 32 timeline_block_(NULL),
31 thread_list_next_(NULL), 33 thread_list_next_(NULL),
32 thread_interrupt_disabled_(1), // Thread interrupts disabled by default. 34 thread_interrupt_disabled_(1), // Thread interrupts disabled by default.
33 log_(new class Log()), 35 log_(new class Log()),
34 stack_base_(0), 36 stack_base_(0),
35 thread_(NULL) { 37 thread_(NULL) {
36 } 38 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 ASSERT(OSThread::GetCurrentTLS() == NULL); 155 ASSERT(OSThread::GetCurrentTLS() == NULL);
154 OSThread* os_thread = CreateOSThread(); 156 OSThread* os_thread = CreateOSThread();
155 if (os_thread != NULL) { 157 if (os_thread != NULL) {
156 OSThread::SetCurrent(os_thread); 158 OSThread::SetCurrent(os_thread);
157 os_thread->set_name("Unknown"); 159 os_thread->set_name("Unknown");
158 } 160 }
159 return os_thread; 161 return os_thread;
160 } 162 }
161 163
162 164
163 bool OSThread::IsThreadInList(ThreadJoinId join_id) { 165 bool OSThread::IsThreadInList(ThreadId id) {
164 if (join_id == OSThread::kInvalidThreadJoinId) { 166 if (id == OSThread::kInvalidThreadId) {
165 return false; 167 return false;
166 } 168 }
167 OSThreadIterator it; 169 OSThreadIterator it;
168 while (it.HasNext()) { 170 while (it.HasNext()) {
169 ASSERT(OSThread::thread_list_lock_->IsOwnedByCurrentThread()); 171 ASSERT(OSThread::thread_list_lock_->IsOwnedByCurrentThread());
170 OSThread* t = it.Next(); 172 OSThread* t = it.Next();
171 // An address test is not sufficient because the allocator may recycle 173 // An address test is not sufficient because the allocator may recycle
172 // the address for another Thread. Test against the thread's join id. 174 // the address for another Thread. Test against the thread's id.
173 if (t->join_id() == join_id) { 175 if (t->id() == id) {
174 return true; 176 return true;
175 } 177 }
176 } 178 }
177 return false; 179 return false;
178 } 180 }
179 181
180 182
181 void OSThread::DisableOSThreadCreation() { 183 void OSThread::DisableOSThreadCreation() {
182 MutexLocker ml(thread_list_lock_); 184 MutexLocker ml(thread_list_lock_);
183 creation_enabled_ = false; 185 creation_enabled_ = false;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 285
284 OSThread* OSThreadIterator::Next() { 286 OSThread* OSThreadIterator::Next() {
285 ASSERT(OSThread::thread_list_lock_ != NULL); 287 ASSERT(OSThread::thread_list_lock_ != NULL);
286 ASSERT(OSThread::thread_list_lock_->IsOwnedByCurrentThread()); 288 ASSERT(OSThread::thread_list_lock_->IsOwnedByCurrentThread());
287 OSThread* current = next_; 289 OSThread* current = next_;
288 next_ = next_->thread_list_next_; 290 next_ = next_->thread_list_next_;
289 return current; 291 return current;
290 } 292 }
291 293
292 } // namespace dart 294 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/os_thread.h ('k') | runtime/vm/os_thread_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698