OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 #ifndef VM_THREAD_H_ | 5 #ifndef VM_THREAD_H_ |
6 #define VM_THREAD_H_ | 6 #define VM_THREAD_H_ |
7 | 7 |
8 #include "vm/assert.h" | 8 #include "vm/assert.h" |
9 #include "vm/allocation.h" | 9 #include "vm/allocation.h" |
10 #include "vm/globals.h" | 10 #include "vm/globals.h" |
| 11 #include "vm/isolate.h" |
11 | 12 |
12 // Declare the OS-specific types ahead of defining the generic classes. | 13 // Declare the OS-specific types ahead of defining the generic classes. |
13 #if defined(TARGET_OS_LINUX) | 14 #if defined(TARGET_OS_LINUX) |
14 #include "vm/thread_linux.h" | 15 #include "vm/thread_linux.h" |
15 #elif defined(TARGET_OS_MACOS) | 16 #elif defined(TARGET_OS_MACOS) |
16 #include "vm/thread_macos.h" | 17 #include "vm/thread_macos.h" |
17 #elif defined(TARGET_OS_WINDOWS) | 18 #elif defined(TARGET_OS_WINDOWS) |
18 #include "vm/thread_win.h" | 19 #include "vm/thread_win.h" |
19 #else | 20 #else |
20 #error Unknown target os. | 21 #error Unknown target os. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 | 79 |
79 private: | 80 private: |
80 MonitorData data_; // OS-specific data. | 81 MonitorData data_; // OS-specific data. |
81 | 82 |
82 DISALLOW_COPY_AND_ASSIGN(Monitor); | 83 DISALLOW_COPY_AND_ASSIGN(Monitor); |
83 }; | 84 }; |
84 | 85 |
85 | 86 |
86 class MutexLocker : public StackResource { | 87 class MutexLocker : public StackResource { |
87 public: | 88 public: |
88 explicit MutexLocker(Mutex* mutex) : StackResource(), mutex_(mutex) { | 89 explicit MutexLocker(Mutex* mutex) : |
| 90 StackResource(Isolate::Current()), |
| 91 mutex_(mutex) { |
89 ASSERT(mutex != NULL); | 92 ASSERT(mutex != NULL); |
90 // TODO(iposva): Consider adding a no GC scope here. | 93 // TODO(iposva): Consider adding a no GC scope here. |
91 mutex_->Lock(); | 94 mutex_->Lock(); |
92 } | 95 } |
93 | 96 |
94 virtual ~MutexLocker() { | 97 virtual ~MutexLocker() { |
95 mutex_->Unlock(); | 98 mutex_->Unlock(); |
96 // TODO(iposva): Consider decrementing the no GC scope here. | 99 // TODO(iposva): Consider decrementing the no GC scope here. |
97 } | 100 } |
98 | 101 |
99 private: | 102 private: |
100 Mutex* const mutex_; | 103 Mutex* const mutex_; |
101 | 104 |
102 DISALLOW_COPY_AND_ASSIGN(MutexLocker); | 105 DISALLOW_COPY_AND_ASSIGN(MutexLocker); |
103 }; | 106 }; |
104 | 107 |
105 | 108 |
106 class MonitorLocker : public StackResource { | 109 class MonitorLocker : public StackResource { |
107 public: | 110 public: |
108 explicit MonitorLocker(Monitor* monitor) | 111 explicit MonitorLocker(Monitor* monitor) |
109 : StackResource(), | 112 : StackResource(Isolate::Current()), |
110 monitor_(monitor) { | 113 monitor_(monitor) { |
111 ASSERT(monitor != NULL); | 114 ASSERT(monitor != NULL); |
112 // TODO(iposva): Consider adding a no GC scope here. | 115 // TODO(iposva): Consider adding a no GC scope here. |
113 monitor_->Enter(); | 116 monitor_->Enter(); |
114 } | 117 } |
115 | 118 |
116 virtual ~MonitorLocker() { | 119 virtual ~MonitorLocker() { |
117 monitor_->Exit(); | 120 monitor_->Exit(); |
118 // TODO(iposva): Consider decrementing the no GC scope here. | 121 // TODO(iposva): Consider decrementing the no GC scope here. |
119 } | 122 } |
(...skipping 13 matching lines...) Expand all Loading... |
133 private: | 136 private: |
134 Monitor* const monitor_; | 137 Monitor* const monitor_; |
135 | 138 |
136 DISALLOW_COPY_AND_ASSIGN(MonitorLocker); | 139 DISALLOW_COPY_AND_ASSIGN(MonitorLocker); |
137 }; | 140 }; |
138 | 141 |
139 } // namespace dart | 142 } // namespace dart |
140 | 143 |
141 | 144 |
142 #endif // VM_THREAD_H_ | 145 #endif // VM_THREAD_H_ |
OLD | NEW |