From 78485054bd42a62d4205c4a12479f2ab36a6d83f Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 11 Feb 2022 05:21:49 +0000 Subject: [PATCH] Forget about our custom mutex altogether after all Signed-off-by: falkTX --- include/mutex.hpp | 86 ----------------------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 include/mutex.hpp diff --git a/include/mutex.hpp b/include/mutex.hpp deleted file mode 100644 index 5fb8421..0000000 --- a/include/mutex.hpp +++ /dev/null @@ -1,86 +0,0 @@ -/* - * DISTRHO Cardinal Plugin - * Copyright (C) 2021-2022 Filipe Coelho - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 3 of - * the License, or any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * For a full copy of the GNU General Public License see the LICENSE file. - */ - -#pragma once - -#include - -/* replace Rack's mutex with our own custom one, which can do priority inversion. */ - -namespace rack { - - -struct SharedMutex { - pthread_mutex_t readLock; - pthread_mutex_t writeLock; - - SharedMutex() noexcept { - pthread_mutexattr_t attr; - pthread_mutexattr_init(&attr); - pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); - pthread_mutex_init(&readLock, &attr); - pthread_mutexattr_destroy(&attr); - - pthread_mutexattr_t attr2; - pthread_mutexattr_init(&attr2); - pthread_mutexattr_setprotocol(&attr2, PTHREAD_PRIO_NONE); - pthread_mutexattr_settype(&attr2, PTHREAD_MUTEX_NORMAL); - pthread_mutex_init(&writeLock, &attr2); - pthread_mutexattr_destroy(&attr2); - } - - ~SharedMutex() noexcept { - pthread_mutex_destroy(&readLock); - pthread_mutex_destroy(&writeLock); - } - - // for std::lock_guard usage, writers lock - void lock() noexcept { - pthread_mutex_lock(&readLock); - pthread_mutex_lock(&writeLock); - } - - void unlock() noexcept { - pthread_mutex_unlock(&writeLock); - pthread_mutex_unlock(&readLock); - } - - // for SharedLock usage, readers lock - void lock_shared() noexcept { - pthread_mutex_lock(&readLock); - } - void unlock_shared() noexcept { - pthread_mutex_unlock(&readLock); - } -}; - - -template -struct SharedLock { - Mutex& mutex; - - SharedLock(Mutex& m) noexcept : mutex(m) { - mutex.lock_shared(); - } - ~SharedLock() noexcept { - mutex.unlock_shared(); - } -}; - - -} // namespace rack