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

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

Issue 474913004: - Account for number of pending tasks in old-space collections. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
« runtime/vm/thread_android.cc ('K') | « runtime/vm/thread_macos.cc ('k') | no next file » | 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 "platform/globals.h" 5 #include "platform/globals.h"
6 #if defined(TARGET_OS_WINDOWS) 6 #if defined(TARGET_OS_WINDOWS)
7 7
8 #include "vm/thread.h" 8 #include "vm/thread.h"
9 9
10 #include <process.h> // NOLINT 10 #include <process.h> // NOLINT
11 11
12 #include "platform/assert.h" 12 #include "platform/assert.h"
13 #include "vm/isolate.h"
13 14
14 namespace dart { 15 namespace dart {
15 16
16 class ThreadStartData { 17 class ThreadStartData {
17 public: 18 public:
18 ThreadStartData(Thread::ThreadStartFunction function, uword parameter) 19 ThreadStartData(Thread::ThreadStartFunction function, uword parameter)
19 : function_(function), parameter_(parameter) {} 20 : function_(function), parameter_(parameter) {}
20 21
21 Thread::ThreadStartFunction function() const { return function_; } 22 Thread::ThreadStartFunction function() const { return function_; }
22 uword parameter() const { return parameter_; } 23 uword parameter() const { return parameter_; }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 } 164 }
164 } 165 }
165 166
166 167
167 Mutex::Mutex() { 168 Mutex::Mutex() {
168 // Allocate unnamed semaphore with initial count 1 and max count 1. 169 // Allocate unnamed semaphore with initial count 1 and max count 1.
169 data_.semaphore_ = CreateSemaphore(NULL, 1, 1, NULL); 170 data_.semaphore_ = CreateSemaphore(NULL, 1, 1, NULL);
170 if (data_.semaphore_ == NULL) { 171 if (data_.semaphore_ == NULL) {
171 FATAL1("Mutex allocation failed %d", GetLastError()); 172 FATAL1("Mutex allocation failed %d", GetLastError());
172 } 173 }
174 // When running with assertions enabled we do track the owner.
175 #if defined(DEBUG)
176 owner_ = NULL;
177 #endif // defined(DEBUG)
173 } 178 }
174 179
175 180
176 Mutex::~Mutex() { 181 Mutex::~Mutex() {
177 CloseHandle(data_.semaphore_); 182 CloseHandle(data_.semaphore_);
183 // When running with assertions enabled we do track the owner.
184 #if defined(DEBUG)
185 ASSERT(owner_ == NULL);
186 #endif // defined(DEBUG)
178 } 187 }
179 188
180 189
181 void Mutex::Lock() { 190 void Mutex::Lock() {
182 DWORD result = WaitForSingleObject(data_.semaphore_, INFINITE); 191 DWORD result = WaitForSingleObject(data_.semaphore_, INFINITE);
183 if (result != WAIT_OBJECT_0) { 192 if (result != WAIT_OBJECT_0) {
184 FATAL1("Mutex lock failed %d", GetLastError()); 193 FATAL1("Mutex lock failed %d", GetLastError());
185 } 194 }
195 // When running with assertions enabled we do track the owner.
196 #if defined(DEBUG)
197 owner_ = Isolate::Current();
198 #endif // defined(DEBUG)
186 } 199 }
187 200
188 201
189 bool Mutex::TryLock() { 202 bool Mutex::TryLock() {
190 // Attempt to pass the semaphore but return immediately. 203 // Attempt to pass the semaphore but return immediately.
191 DWORD result = WaitForSingleObject(data_.semaphore_, 0); 204 DWORD result = WaitForSingleObject(data_.semaphore_, 0);
192 if (result == WAIT_OBJECT_0) { 205 if (result == WAIT_OBJECT_0) {
206 // When running with assertions enabled we do track the owner.
207 #if defined(DEBUG)
208 owner_ = Isolate::Current();
209 #endif // defined(DEBUG)
193 return true; 210 return true;
194 } 211 }
195 if (result == WAIT_ABANDONED || result == WAIT_FAILED) { 212 if (result == WAIT_ABANDONED || result == WAIT_FAILED) {
196 FATAL1("Mutex try lock failed %d", GetLastError()); 213 FATAL1("Mutex try lock failed %d", GetLastError());
197 } 214 }
198 ASSERT(result == WAIT_TIMEOUT); 215 ASSERT(result == WAIT_TIMEOUT);
199 return false; 216 return false;
200 } 217 }
201 218
202 219
203 void Mutex::Unlock() { 220 void Mutex::Unlock() {
221 // When running with assertions enabled we do track the owner.
222 #if defined(DEBUG)
223 ASSERT(owner_ == Isolate::Current());
224 owner_ = NULL;
225 #endif // defined(DEBUG)
204 BOOL result = ReleaseSemaphore(data_.semaphore_, 1, NULL); 226 BOOL result = ReleaseSemaphore(data_.semaphore_, 1, NULL);
205 if (result == 0) { 227 if (result == 0) {
206 FATAL1("Mutex unlock failed %d", GetLastError()); 228 FATAL1("Mutex unlock failed %d", GetLastError());
207 } 229 }
208 } 230 }
209 231
210 232
211 ThreadLocalKey MonitorWaitData::monitor_wait_data_key_ = 233 ThreadLocalKey MonitorWaitData::monitor_wait_data_key_ =
212 Thread::kUnsetThreadLocalKey; 234 Thread::kUnsetThreadLocalKey;
213 235
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 // timeout before we signal it, that object will get an extra 452 // timeout before we signal it, that object will get an extra
431 // signal. This will be treated as a spurious wake-up and is OK 453 // signal. This will be treated as a spurious wake-up and is OK
432 // since all uses of monitors should recheck the condition after a 454 // since all uses of monitors should recheck the condition after a
433 // Wait. 455 // Wait.
434 data_.SignalAndRemoveAllWaiters(); 456 data_.SignalAndRemoveAllWaiters();
435 } 457 }
436 458
437 } // namespace dart 459 } // namespace dart
438 460
439 #endif // defined(TARGET_OS_WINDOWS) 461 #endif // defined(TARGET_OS_WINDOWS)
OLDNEW
« runtime/vm/thread_android.cc ('K') | « runtime/vm/thread_macos.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698