Index: runtime/vm/os_thread_linux.cc |
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc |
index f82123306e0c9d8141b3810da7edf58869f618a3..a0e68f1870e5b3222039a3b5467aea05d29cd214 100644 |
--- a/runtime/vm/os_thread_linux.cc |
+++ b/runtime/vm/os_thread_linux.cc |
@@ -341,6 +341,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); |