| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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" // NOLINT | 5 #include "platform/globals.h" // NOLINT |
| 6 #if defined(HOST_OS_FUCHSIA) | 6 #if defined(HOST_OS_FUCHSIA) |
| 7 | 7 |
| 8 #include "vm/os_thread.h" | 8 #include "vm/os_thread.h" |
| 9 #include "vm/os_thread_fuchsia.h" | 9 #include "vm/os_thread_fuchsia.h" |
| 10 | 10 |
| 11 #include <errno.h> // NOLINT | 11 #include <errno.h> // NOLINT |
| 12 #include <magenta/syscalls.h> | 12 #include <magenta/syscalls.h> |
| 13 #include <magenta/syscalls/object.h> |
| 14 #include <magenta/threads.h> |
| 13 #include <magenta/types.h> | 15 #include <magenta/types.h> |
| 14 | 16 |
| 15 #include "platform/assert.h" | 17 #include "platform/assert.h" |
| 16 | 18 |
| 17 namespace dart { | 19 namespace dart { |
| 18 | 20 |
| 19 #define VALIDATE_PTHREAD_RESULT(result) \ | 21 #define VALIDATE_PTHREAD_RESULT(result) \ |
| 20 if (result != 0) { \ | 22 if (result != 0) { \ |
| 21 FATAL1("pthread error: %d", result); \ | 23 FATAL1("pthread error: %d", result); \ |
| 22 } | 24 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 result = pthread_create(&tid, &attr, ThreadStart, data); | 116 result = pthread_create(&tid, &attr, ThreadStart, data); |
| 115 RETURN_ON_PTHREAD_FAILURE(result); | 117 RETURN_ON_PTHREAD_FAILURE(result); |
| 116 | 118 |
| 117 result = pthread_attr_destroy(&attr); | 119 result = pthread_attr_destroy(&attr); |
| 118 RETURN_ON_PTHREAD_FAILURE(result); | 120 RETURN_ON_PTHREAD_FAILURE(result); |
| 119 | 121 |
| 120 return 0; | 122 return 0; |
| 121 } | 123 } |
| 122 | 124 |
| 123 | 125 |
| 124 const ThreadId OSThread::kInvalidThreadId = static_cast<ThreadId>(0); | 126 const ThreadId OSThread::kInvalidThreadId = MX_KOID_INVALID; |
| 125 const ThreadJoinId OSThread::kInvalidThreadJoinId = | 127 const ThreadJoinId OSThread::kInvalidThreadJoinId = |
| 126 static_cast<ThreadJoinId>(0); | 128 static_cast<ThreadJoinId>(0); |
| 127 | 129 |
| 128 | 130 |
| 129 ThreadLocalKey OSThread::CreateThreadLocal(ThreadDestructor destructor) { | 131 ThreadLocalKey OSThread::CreateThreadLocal(ThreadDestructor destructor) { |
| 130 pthread_key_t key = kUnsetThreadLocalKey; | 132 pthread_key_t key = kUnsetThreadLocalKey; |
| 131 int result = pthread_key_create(&key, destructor); | 133 int result = pthread_key_create(&key, destructor); |
| 132 VALIDATE_PTHREAD_RESULT(result); | 134 VALIDATE_PTHREAD_RESULT(result); |
| 133 ASSERT(key != kUnsetThreadLocalKey); | 135 ASSERT(key != kUnsetThreadLocalKey); |
| 134 return key; | 136 return key; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 149 } | 151 } |
| 150 | 152 |
| 151 | 153 |
| 152 intptr_t OSThread::GetMaxStackSize() { | 154 intptr_t OSThread::GetMaxStackSize() { |
| 153 const int kStackSize = (128 * kWordSize * KB); | 155 const int kStackSize = (128 * kWordSize * KB); |
| 154 return kStackSize; | 156 return kStackSize; |
| 155 } | 157 } |
| 156 | 158 |
| 157 | 159 |
| 158 ThreadId OSThread::GetCurrentThreadId() { | 160 ThreadId OSThread::GetCurrentThreadId() { |
| 159 return pthread_self(); | 161 mx_info_handle_basic_t info; |
| 162 mx_handle_t thread_handle = thrd_get_mx_handle(thrd_current()); |
| 163 mx_status_t status = |
| 164 mx_object_get_info(thread_handle, MX_INFO_HANDLE_BASIC, &info, |
| 165 sizeof(info), nullptr, nullptr); |
| 166 return status == NO_ERROR ? info.koid : MX_KOID_INVALID; |
| 160 } | 167 } |
| 161 | 168 |
| 162 | 169 |
| 163 #ifndef PRODUCT | 170 #ifndef PRODUCT |
| 164 ThreadId OSThread::GetCurrentThreadTraceId() { | 171 ThreadId OSThread::GetCurrentThreadTraceId() { |
| 165 return pthread_self(); | 172 return pthread_self(); |
| 166 } | 173 } |
| 167 #endif // PRODUCT | 174 #endif // PRODUCT |
| 168 | 175 |
| 169 | 176 |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 void Monitor::NotifyAll() { | 431 void Monitor::NotifyAll() { |
| 425 // When running with assertions enabled we track the owner. | 432 // When running with assertions enabled we track the owner. |
| 426 ASSERT(IsOwnedByCurrentThread()); | 433 ASSERT(IsOwnedByCurrentThread()); |
| 427 int result = pthread_cond_broadcast(data_.cond()); | 434 int result = pthread_cond_broadcast(data_.cond()); |
| 428 VALIDATE_PTHREAD_RESULT(result); | 435 VALIDATE_PTHREAD_RESULT(result); |
| 429 } | 436 } |
| 430 | 437 |
| 431 } // namespace dart | 438 } // namespace dart |
| 432 | 439 |
| 433 #endif // defined(HOST_OS_FUCHSIA) | 440 #endif // defined(HOST_OS_FUCHSIA) |
| OLD | NEW |