summaryrefslogtreecommitdiff
path: root/include/ftl
diff options
context:
space:
mode:
author Leon Scroggins <scroggo@google.com> 2022-11-12 12:46:47 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-12 12:46:47 +0000
commitb9262123561e07c3dbc721fd2e1ee4db6160d92e (patch)
tree1cd9f3a70e2bdb59671b6b23f4a46fa0a30e12aa /include/ftl
parentb67e695f6b75d2eed8a5d0f6603bc932ad2a3e51 (diff)
parentb54b40bb752f0f4d6a2ec3e5100d7d72c09ea40b (diff)
Merge "FTL: Add wrapper for shared_mutex"
Diffstat (limited to 'include/ftl')
-rw-r--r--include/ftl/shared_mutex.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/include/ftl/shared_mutex.h b/include/ftl/shared_mutex.h
new file mode 100644
index 0000000000..146f5ba4a9
--- /dev/null
+++ b/include/ftl/shared_mutex.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+#include <shared_mutex>
+
+namespace android::ftl {
+
+// Wrapper around std::shared_mutex to provide capabilities for thread-safety
+// annotations.
+// TODO(b/257958323): This class is no longer needed once b/135688034 is fixed (currently blocked on
+// b/175635923).
+class [[clang::capability("shared_mutex")]] SharedMutex final {
+ public:
+ [[clang::acquire_capability()]] void lock() {
+ mutex_.lock();
+ }
+ [[clang::release_capability()]] void unlock() {
+ mutex_.unlock();
+ }
+
+ [[clang::acquire_shared_capability()]] void lock_shared() {
+ mutex_.lock_shared();
+ }
+ [[clang::release_shared_capability()]] void unlock_shared() {
+ mutex_.unlock_shared();
+ }
+
+ private:
+ std::shared_mutex mutex_;
+};
+
+} // namespace android::ftl