summaryrefslogtreecommitdiff
path: root/src/components/utils/src/rwlock_posix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/utils/src/rwlock_posix.cc')
-rw-r--r--src/components/utils/src/rwlock_posix.cc30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/components/utils/src/rwlock_posix.cc b/src/components/utils/src/rwlock_posix.cc
index 7cc850b25..08edb8cb0 100644
--- a/src/components/utils/src/rwlock_posix.cc
+++ b/src/components/utils/src/rwlock_posix.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Ford Motor Company
+ * Copyright (c) 2015, Ford Motor Company
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -49,22 +49,44 @@ RWLock::~RWLock() {
}
}
-void RWLock::AcquireForReading() {
+bool RWLock::AcquireForReading() {
if (pthread_rwlock_rdlock(&rwlock_) != 0) {
LOG4CXX_ERROR(logger_, "Failed to acquire rwlock for reading");
+ return false;
}
+ return true;
}
-void RWLock::AcquireForWriting() {
+bool RWLock::TryAcquireForReading() {
+ if (pthread_rwlock_tryrdlock(&rwlock_) != 0) {
+ LOG4CXX_ERROR(logger_, "Failed to acquire rwlock for reading");
+ return false;
+ }
+ return true;
+}
+
+bool RWLock::AcquireForWriting() {
if (pthread_rwlock_wrlock(&rwlock_) != 0) {
LOG4CXX_ERROR(logger_, "Failed to acquire rwlock for writing");
+ return false;
+ }
+ return true;
+}
+
+bool RWLock::TryAcquireForWriting() {
+ if (pthread_rwlock_trywrlock(&rwlock_) != 0) {
+ LOG4CXX_ERROR(logger_, "Failed to acquire rwlock for writing");
+ return false;
}
+ return true;
}
-void RWLock::Release() {
+bool RWLock::Release() {
if (pthread_rwlock_unlock(&rwlock_) != 0) {
LOG4CXX_ERROR(logger_, "Failed to release rwlock");
+ return false;
}
+ return true;
}
} // namespace sync_primitives