Index: runtime/vm/os_thread_android.cc |
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc |
index c02fd9ab4a81b6f281a06b0b3721b7a8a82ccdc6..9b93cbe70940f5ee6a532286164279c8cfea6edb 100644 |
--- a/runtime/vm/os_thread_android.cc |
+++ b/runtime/vm/os_thread_android.cc |
@@ -336,6 +336,22 @@ Monitor::~Monitor() { |
} |
+bool Monitor::TryEnter() { |
+ int result = pthread_mutex_trylock(data_.mutex()); |
+ // Return false if the lock is busy and locking failed. |
+ if (result == EBUSY) { |
+ return false; |
+ } |
+ ASSERT_PTHREAD_SUCCESS(result); // Verify no other errors. |
+#if defined(DEBUG) |
+ // When running with assertions enabled we track the owner. |
+ ASSERT(owner_ == OSThread::kInvalidThreadId); |
+ owner_ = OSThread::GetCurrentThreadId(); |
+#endif // defined(DEBUG) |
+ return true; |
+} |
+ |
+ |
void Monitor::Enter() { |
int result = pthread_mutex_lock(data_.mutex()); |
VALIDATE_PTHREAD_RESULT(result); |