diff options
author | Zach Reizner <zachr@google.com> | 2015-11-13 16:09:39 -0800 |
---|---|---|
committer | Zach Reizner <zachr@google.com> | 2015-11-13 16:09:39 -0800 |
commit | 49446bc72b33b8b68352b2048657bea4a8da4a42 (patch) | |
tree | 6affe4ab0837e0cef4f66ad7853385e74d6a5ee9 /autolock.h | |
parent | 8467b129419b0f78974bd478809ad32da4fd09fa (diff) |
drm_hwcomposer: add AutoLock to automatically handle pthread_mutex_lock
For functions that need to hold locks and also handle errors, using AutoLock
will make them much simpler and less prone to mutex handling errors.
Change-Id: Ida6545850e89186c552e3d58b2973c14852494ad
Diffstat (limited to 'autolock.h')
-rw-r--r-- | autolock.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/autolock.h b/autolock.h new file mode 100644 index 0000000..3b824e2 --- /dev/null +++ b/autolock.h @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2015 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. + */ + +#include <pthread.h> + +namespace android { + +class AutoLock { + public: + AutoLock(pthread_mutex_t *mutex, const char *const name) + : mutex_(mutex), name_(name) { + } + ~AutoLock() { + if (locked_) + Unlock(); + } + + AutoLock(const AutoLock &rhs) = delete; + AutoLock &operator=(const AutoLock &rhs) = delete; + + int Lock(); + int Unlock(); + + private: + pthread_mutex_t *const mutex_; + bool locked_ = false; + const char *const name_; +}; +} |